1

我正在学习 C++ 来编写一个程序来计算每个不同值在输入中出现的连续次数。

代码是

#include <iostream>
int main()
{
    // currVal is the number we're counting; we'll read new values into val
    int currVal = 0, val = 0;
    // read first number and ensure that we have data to process
    if (std::cin >> currVal)
    {
        int cnt = 1; // store the count for the current value we're processing
        while (std::cin >> val)
        { // read the remaining numbers
            if (val == currVal) // if the values are the same
                ++cnt; // add 1 to cnt
            else
            { // otherwise, print the count for the previous value
                std::cout << currVal << " occurs " << cnt << " times" << std::endl;
                currVal = val; // remember the new value
                cnt = 1; // reset the counter
            }
        } // while loop ends here
        // remember to print the count for the last value in the file
        std::cout << currVal << " occurs " << cnt << " times" << std::endl;
    } // outermost if statement ends here
    return 0;
}

但它不会计算最后一组数字。例如:如果我输入 5 5 5 3 3 4 4 4 4,则输出为:

5 出现 5 次。3 出现 2 次。

最后一组结果是“4 出现 4 次”。没有出现。

我想知道代码有什么问题。

请帮忙。

谢谢。

hc。

4

2 回答 2

0

您似乎仅在 (val == currVal) 为假时才生成输出。是什么让您认为在从输入中读取最后 4 个之后会发生这种情况?

于 2013-10-10T01:11:34.287 回答
0

你的程序是正确的。当条件为假时,您的 while 循环将退出

while (std::cin >> val)

当您到达文件结尾 (EOF) 时,流输入将返回 false,您可以从终端使用 Ctrl-D 输入。

试着把你的输入放在一个文件中,你的程序就可以工作了。我使用该cat命令从终端的标准输入复制并重定向到一个名为input. 您需要按下Ctrd-D以告知cat您已完成。input您还可以使用您喜欢的编辑器创建文件。

$ cat > input
5 5 5 3 3 4 4 4 4
<press Ctrl-D here>

现在调用程序并重定向文件中的输入

$ ./test < input

输出是

5 occurs 3 times
3 occurs 2 times
4 occurs 4 times

请参阅有关 SO 的相关问题

while (cin >> ) 上的问题

于 2013-10-10T01:23:05.967 回答