我正在阅读C ++ Primer(第5版)。在1.4.4节中,有以下示例:
#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;
}
使用给定输入运行它时 42 42 42 42 42 55 55 62 100 100 100
打印
42次发生5次
55次发生2次
62次发生1次
但是,为了获得最终输出线
100次发生3次
你必须按CTRL + D.然后打印出来并退出程序。
这是为什么?对我来说,看起来应该打印最后一行,程序退出其他人。我似乎误解了控制流程是如何执行的,所以有人可以澄清一下吗?
ps我知道这个Incorrect output. C++ primer 1.4.4和C++ Primer fifth edtion book (if statement) is this not correct?但是,这些都没有解释为什么你必须按ctrl + d打印最终语句。
答案 0 :(得分:3)
那是因为这部分:
while (std::cin >> val)
为了终止读取输入流,您必须使用由Ctrl-D提供的EOF来终止它。
考虑一下:默认情况下cin
跳过空格,每次输入一个数字时,用空格(空格,制表符或换行符)将其分隔开来。
程序将如何终止输入? 答案是当它读取EOF字符时 - 如前所述,由Ctrl-D提供。 < / p>
答案 1 :(得分:2)
您必须按 CTRL + D ,否则程序无法知道您的stdin流何时完成。否则它将永远坐在while (std::cin >> val
,而不会终止。