[英]Why is this not producing any output when using printf()?
目前,我正在研究K&R C,并且正在尝试一个示例,其中程序将字符流作为输入,然后打印该流中的字符数。
据我所知,这似乎没有产生任何输出:
main()
{
long nc;
nc = 0;
while (getchar() != EOF){
++nc;
}
printf("%1d\n", nc);
}
但这似乎很好,尽管与我想要的略有不同:
main()
{
long nc;
nc = 0;
while (getchar() != EOF){
++nc;
printf("%1d\n", nc);
}
}
任何指针将不胜感激。 提前致谢!
编辑
我尝试使用ctrl z模拟EOF,但这似乎无法正常工作。 我正在Windows 7的cmd行上运行此命令,如果有任何区别的话。
您的程序运行正常。
您看不到输出,因为您从未发送EOF
。 如果您在命令行上运行,请传入一个文件:
./a.out <myfile.txt
(这也将在Windows上运行)
或者,如果您自己输入内容,请输入<return><ctrl-D><return>
发送EOF
。 (或Windows上的<return><ctrl-Z><return>
)
然后,这将按预期工作。
➤ cat try.c
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF){
++nc;
}
printf("%1d\n", nc);
}
➤ gcc try.c -o try && ./try <try.c
131
这是与GnuCC的示例会话。
为了使getchar
返回EOF
您需要“关闭流/到达流的末尾”。 请参阅以下问题的答案: C:如何模拟EOF?
简而言之:您需要将EOF发送到流(例如,在Windows上通过发送Ctrl + Z或在Linux上通过发送Ctrl + D)。 或者例如使用管道。 例如,将一个文件的内容管道传输到您的应用程序。 当第一个应用程序终止时,它会自动关闭流,因此您的应用程序将读取EOF。
例如在Linux下:
$ cat some_file.txt | ./a.out
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.