Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 发生EOF后如何读取任何内容_C - Fatal编程技术网

C 发生EOF后如何读取任何内容

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,

我在学习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
,而不影响
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行)