C++ 基本 While 循环:未知输入和值增量

Posted

技术标签:

【中文标题】C++ 基本 While 循环:未知输入和值增量【英文标题】:C++ Basic While Loop: Unknown Inputs and Value Increment 【发布时间】:2016-10-24 04:31:27 【问题描述】:

所以我正在尝试编写一个程序,该程序从具有标记 0 的数据文件中读取未知输入,或者我猜测循环的终止点。

0 之前每行的整数个数(整数计数)。 数据文件中所有整数的数量(int totalcount)。 数据文件中的行数(int 行)。

来自数据文件的未知输入的两个示例:

示例一: 1 2 3 0 4 5 6 7 0 示例二: 0 9 11 -11 1 1 0 0 2 0

这是我的程序(没有“计数”,因为这是我的问题所在):

int main()

    //Declaring variables.
    int input, lines, count, totalcount, datafile;
    lines = 0;
    count = 0;
    totalcount = 0;

    //Loop runs as long as data file has an integer to take in.
    while(cin >> datafile)
        
            //If datafile is not 0, loop runs until datafile is 0.  
            while(datafile != 0)
                
                    //Counts all integers in the file except 0.
                    totalcount += 1; 
                    cin >> datafile;
                
            //Counts how many lines there are in a data file using sentinel 0 (not "/n").
            if(datafile == 0)
                lines += 1;  
            //Outputs.
            cout << lines << setw(11) << count << setw(11) << totalcount << endl;
        
    return 0;

除了逻辑/概念本身之外,请不要担心技术性、效率或其他任何事情,因为我只是想在我的知识中找到缺失的环节来完成这项任务。

话虽如此,我的预期输出格式如下: "Line #" "每行的整数计数" "数据文件中所有整数的总计数"

使用示例 one 和我当前的代码,我会得到输出(间距不准确,'.' 用于空格):

1......0......3 2......0......7

正确的预期输出:

1......3......3 2......4......7

我想要任何关于如何计算每行整数(在标记 0 之前)并将该值分配给“int count”的提示或解释,而该值不会保留到下一行。

我是 C++ 入门课程的学生,所以请先向我展示一个基本方法,告诉我如何进行此操作,然后为将来的应用程序提供任何其他必要的高级选项。

行为准则个人陈述: 通过参与,您提供了完成作业所需的知识,而不是完成作业本身。使用的示例由我生成,用于概念演示目的,只是最终作业的一小部分。

2016 年 10 月 23 日晚上 9:56 更新 1: 当前尝试使用“temp”变量从“totalcount”中减去。如果尝试成功,我将更新我的代码。

【问题讨论】:

【参考方案1】:

totalcount 是计数的总和。这是我的建议

#include <iostream>
#include <iomanip>
using namespace std;

int main()

    //Declaring variables.
    int input, lines, count, totalcount, datafile;
    lines = 0;
    count = 0;
    totalcount = 0;

    //Loop runs as long as data file has an integer to take in.
    while(cin >> datafile)
        
            // Add count to totalcount and reset count each time reach 0
            if (datafile == 0) 
                totalcount += count;
                lines += 1;  

                cout << lines << setw(11) << count << setw(11) << totalcount << endl;
                count = 0;
             
            //otherwise increase count
            else 
                count++;
            

        
    return 0;

【讨论】:

我知道我把它弄得太复杂了。整个赋值大量执行循环,因此我无法识别基本选择语句的使用。谢谢你阻止我的过度思考! 我刚刚测试运行了我的程序,实际上它确实为我的特定程序分配提供了 >totalcount。我的教授给出了一个带有预期输出值的示例数据文件,一切看起来都很好。 我确定我是经验最少的,但如果我没记错的话,count 会递增,直到 cin 为 0,这会将 count 重置为 0。但在 count 被分配为 0 之前, count 中的值已添加到 totalcount。这是否意味着除了 0 之外的每个整数,totalcount 的增量为 1,并且对于间隔 (0,0) 之间的每个整数,count 的增量为 1?使用示例集 1 2 3 0 4 5 6 7 0。 @Abhineet 是的,我犯了一个错误。您看到这一点是对的,因为我将我的作业视为一个整体,它只要求总输出一次,这就是为什么它在我的示例中保持不变。 @khôinguyễn 是的,我认为这可能会让人感到困惑,这就是为什么我的开场白说:“所以我正在尝试编写一个程序,它从具有标记 0 的数据文件中读取未知输入,或者我猜循环的终止点。”同样在我的代码本身中,我写道:“//使用标记 0(不是“/n”)计算数据文件中有多少行。”所以我想我很清楚“0”是我的结束条件,但这是我的第一篇文章,所以希望下次我能在写问题时做得更好:/

以上是关于C++ 基本 While 循环:未知输入和值增量的主要内容,如果未能解决你的问题,请参考以下文章

您如何专门获得一个浮点数为 2 位小数的输入作为 C++ 中 while 循环的条件?

[编程题] 糖果谜题 C++实现输入未知个整数

为啥'continue'语句忽略'while'循环中的循环计数器增量,而不是'for'循环?

Stroustrup C++ 书籍。如何跟踪while循环中哪个整数输入最小和最大?

C++——while循环误输入非数字(如字母,标点)导致死循环的解决方法

0.2的增量不遵守循环条件?