gpt4 book ai didi

c++ - 对 C++ Primer 示例中的控制流执行感到困惑

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:32 25 4
gpt4 key购买 nike

我正在阅读 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.4C++ Primer fifth edtion book (if statement) is this not correct?但是,这些都不能解释为什么您必须 ctrl+d 才能打印最终声明。

最佳答案

那是因为这部分:

while (std::cin >> val)

为了终止读取输入流,您必须使用 Ctrl-D 提供的 EOF 来终止它。

想一想:默认情况下,cin 会跳过空格,每次输入数字时都会用空格(空格、制表符或换行符)分隔。

程序将如何终止输入? 答案是当它读取一个 EOF 字符时——如前所述,该字符由 Ctrl-D 提供。

关于c++ - 对 C++ Primer 示例中的控制流执行感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com