此刻我正在浏览K& RC,我正在尝试一个示例,其中程序将字符流作为输入,然后打印流中的字符数。
就我所见,这似乎没有产生任何输出:
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行上运行它,如果这有任何区别的话。
答案 0 :(得分:4)
您的程序运行正常。
您没有看到输出,因为您从未发送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的示例会话。
答案 1 :(得分:2)
要让getchar
返回EOF
,您需要“关闭流/到达流的末尾”。查看此问题的答案:C : How to simulate an EOF?
简而言之: 您需要将EOF发送到流(例如,通过在Windows上发送Ctrl + Z或在Linux上发送Ctrl + D)。 或者例如使用管道。例如,一个文件的管道内容到您的应用程序。当第一个应用程序终止时,它会自动关闭流,因此您的应用程序将读取EOF。
e.g。在Linux下:
$ cat some_file.txt | ./a.out
希望这有帮助。