当我使用此代码时,我可以输入命令行并返回我输入的内容:
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
发生了什么?
答案 0 :(得分:3)
while循环永不退出,因为while (getchar() != EOF)
始终为true。完成输入后,按 Cntrl + D for Linux或 Ctrl + Z for Windows表示EOF。
答案 1 :(得分:1)
像所有人一样,你的节目不会停止。 while循环需要一个条件来停止。你必须使用CTRL + Z(Win)或CTRL + D(Unix)来阻止它,当你管道它实际上为你发送该字符。因为EOF
是END_OF_FILE
。所以当你到达文件的末尾时。操作系统会为您发送该字符。