C 发生EOF后如何读取任何内容
我在学习k&r的c编程书。此程序用于计算输入中的字符数C 发生EOF后如何读取任何内容,c,C,我在学习k&r的c编程书。此程序用于计算输入中的字符数 #include<stdio.h> main() { long nc; nc=0; while(getchar()!=EOF) ++nc; printf("%ld\n",nc); } #包括 main() { 长nc; nc=0; while(getchar()!=EOF) ++数控; printf(“%ld\n”,nc); } 我想知道为什么在EOF发生后nc可以打印。有什么办法吗。文件结束条件只影响stdin,
#include<stdio.h>
main()
{
long nc;
nc=0;
while(getchar()!=EOF)
++nc;
printf("%ld\n",nc);
}
#包括
main()
{
长nc;
nc=0;
while(getchar()!=EOF)
++数控;
printf(“%ld\n”,nc);
}
我想知道为什么在EOF发生后nc可以打印。有什么办法吗。文件结束条件只影响
stdin
,而不影响stdout
。请注意,在找到EOF
后,没有使用stdin
,只需打印到stdout
,我想您会混淆两种不同的东西。EOF与输入有关。printf是一个输出函数。getchar()从stdin读取。printf()写入标准输出。它们是通常映射到同一物理设备(控制台或终端)的不同流。您不应该使用Ctrl-Z或任何终止符
如果您正指望这一点,并且在传统的*nix shell上运行,那么您将暂停进程而不是终止输入(例如,在manbash
中阅读作业控制)
(我知道这个答案来得有点晚,但我看到你在回答其他答案时不断提到Ctrl-Z)
如果您使用的是*nix系统,您可以使用Ctrl-D,但不要期望它会出现在您的输入流中(它只是用作一种信号机制)。m您还可以使用文件输入来测试这一点,该文件输入应该会给您比键入更一致的结果,即
a.out < prog.c
a.out
要计算c程序中的行数,我完全理解它们都是不同的流输入和输出。但问题是当我运行这个程序时。它就像一个无限循环,当我按下(ctrl+z,即EOF)时,它终止而不打印nc(即运行printf行),我完全理解它们都是不同的流输入和输出。但问题是当我运行这个程序时。它就像一个无限循环,当我按下(ctrl+z,即EOF)时,它终止而不打印nc(即运行printf行),我完全理解它们都是不同的流输入和输出。但问题是当我运行这个程序时。它就像一个无限循环,当我按下(ctrl+z,即EOF)时,它终止而不打印nc(即运行printf行)