所以...这是我的代码,引用了 C ++ Primer 1.4.4部分。
#include <iostream>
int main()
{
int currVal = 0, val = 0;
if (std::cin >> currVal) {
int cnt = 1;
while (std::cin >> val) {
if (val == currVal) {
++cnt;
} else {
std::cout << currVal << " occurs "
<< cnt << " times." << std::endl;
currVal = val;
cnt = 1;
}
}
std::cout << currVal << " occurs "
<< cnt << " times." << std::endl;
}
return 0;
}
我必须承认,简单程序基本上可以正常工作。但是,对于进一步的讨论,我想首先参考a asciinema
recording。
在记录中,我运行了./a.out
3次。第一次,我键入数字,然后按 enter 键打印前两个记录,并且仅在按 ctrl + D 键后(最后一个)结果已打印。从本书的前几节中,我知道 ctrl + D 用于馈送一些符号以停止while循环。但是我真的想知道它( ctrl + D 在这里引起奇怪的停止)的工作方式是否与作者的期望一样,因为没有提到如何精确按下键关于书中那个例子。
在最后两次运行中,我的第一种方法是按 ctrl + D (打印第一个结果)和 enter (第二个结果)打印),然后再输入几个 (除了更多行,没有其他响应)。最后,我按了 ctrl + D (打印了第三个结果)。
我的最后一种方法是按 ctrl + D 两次。第一次印刷时打印出第一个结果,第二次印刷时显示出最后两个结果。
在这两次运行中,我感到困惑的是,在按 ctrl + D (我认为)之后,cin
流的末尾应该有一个停止信号。那么,为什么while
循环没有停止?如果有人能解释其背后的流程,我将不胜感激。
我的工作环境是urxvt
上的Manjaro Linux
,安装了zsh
和oh-my-zsh
。