【发布时间】:2015-08-29 02:11:24
【问题描述】:
当我使用这段代码时,我可以在命令行中输入并取回我输入的内容:
main() {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
}
输出:
~/code/c $ ./a.out
one
one
two
two
但是当我使用这段代码时,它只在我输入数据时有效,而不是当我在命令行中输入数据时:
main() {
int nc;
nc = 0;
while (getchar() != EOF) {
nc++;
}
printf("%d\n", nc);
}
当我从文本文件中输入数据时:
~/code/c $ ./a.out < practice.txt
14
当我尝试从命令行输入数据时:
~/code/c $ ./a.out
one
two
three
发生了什么事?
【问题讨论】:
-
你没有告诉程序没有更多的数据(发送给它 EOF),所以它正在等待更多的输入。您不会打印每行的长度;仅适用于整个文件。由于您可能在类似 Unix 的机器上,您可能应该在一行的开头键入 Control-D 以查看最终答案。如果您在该行的中途键入 Control-D,则需要键入第二个 Control-D 以指示 EOF。
-
为什么我的第一个代码示例的行为方式如此?我希望在每次按键后,它会打印字符。发生的事情是它在按下
enter后吐回我按下的字符。这是为什么呢? -
在您输入换行符(或 Control-D)之前,终端驱动程序不会将字符发送到程序。这允许您编辑行(退格等)。因此,除非您更改终端设置,否则您的程序每次点击返回时都会获取一行数据。因此观察到的行为。
标签: c