【发布时间】:2016-06-07 11:07:44
【问题描述】:
我有一些基本代码,我试图在终端中运行一个类。完成输入后,我无法使用 ctrl+d 命令结束代码。该代码查找某些字符的数量,“e”,元音以及使用的总字符数。昨天几个小时,我能够使用 Ctrl+D 命令结束我的程序并继续编辑/添加它,但它突然停止工作。
我注意到当在窗口中输入一串“d”时,按下回车键,然后使用ctrl+d,编程成功显示数据,但其他输入似乎没有给出我正在寻找的 EOF 命令。
我已尝试重置我的终端,保存“d”字符串工作的条件并再次尝试。到底是怎么回事?在广泛阅读该主题后,我认为这可能是由于后台运行的其他原因?
int main() {
char ch;
int ecount=0, vowels=0, other=0;
cin.get(ch);
while(!cin.eof()) {
switch(ch) {
case 'e':
ecount++;
case 'a';
case 'i':
case 'o':
case 'u':
vowels++;
break;
default:
other++;
}
cin.get(ch);
}
cout << ecount << " "<< vowels << " " << other << endl;
}
【问题讨论】:
-
如果不先按回车,就得按两次Ctrl+D。
-
@thatotherguy 我也注意到了——这是标准行为吗?你知道是什么原因造成的吗?
-
是的,这是意料之中的。 Ctrl-D 只是对终端进行任何挂起的读取调用,并返回任何当前缓冲的数据,类似于 Return(除了你还会得到一个
\n)。如果在 Return 或 Ctrl-D 之后按 Ctrl-D,则 read 调用将返回 0 个字节,按照惯例,这意味着输入结束。
标签: c++ macos shell terminal eof