C 为什么在使用printf()时不会产生任何输出?

C 为什么在使用printf()时不会产生任何输出?,c,C,我现在正在经历K&R C,我正在尝试一个例子,程序将字符流作为输入,然后打印出流中的字符数 就我所见,这似乎没有产生任何输出: main() { long nc; nc = 0; while (getchar() != EOF){ ++nc; } printf("%1d\n", nc); } 然而,这似乎很好,尽管与我想要的略有不同: main() { long nc; nc = 0; while (getcha

我现在正在经历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);
    }
}
任何指点都将不胜感激。提前谢谢

编辑

我曾尝试使用ctrlz模拟EOF,但似乎不起作用。我在Windows7上运行这个命令行,如果这有什么不同的话。
您的程序运行良好

您没有看到输出,因为您从未发送
EOF
。如果在命令行上运行,请传入文件:

./a.out <myfile.txt
下面是一个使用GnuCC的示例会话


您的程序运行良好

您没有看到输出,因为您从未发送
EOF
。如果在命令行上运行,请传入文件:

./a.out <myfile.txt
下面是一个使用GnuCC的示例会话


对于
getchar
要返回
EOF
,您需要“关闭流/到达流的末尾”。见对该问题的回答:

简言之: 您需要将EOF发送到流(例如,在Windows上发送Ctrl+Z或在Linux上发送Ctrl+D)。 或例如使用管道。例如,将一个文件的内容导入应用程序。当第一个应用程序终止时,它会自动关闭流,以便您的应用程序将读取EOF

e、 g.在Linux下:

$ cat some_file.txt | ./a.out

希望这有帮助。

对于
getchar
要返回
EOF
您需要“关闭流/到达流的末尾”。见对该问题的回答:

简言之: 您需要将EOF发送到流(例如,在Windows上发送Ctrl+Z或在Linux上发送Ctrl+D)。 或例如使用管道。例如,将一个文件的内容导入应用程序。当第一个应用程序终止时,它会自动关闭流,以便您的应用程序将读取EOF

e、 g.在Linux下:

$ cat some_file.txt | ./a.out

希望这有帮助。

如何关闭输入流?添加getch();在printfi之后,
printf
循环中工作,而不是在循环中工作,那么它永远不会接收到
EOF
。调试器说什么?
%1d\n
-->
%ld\n
如何关闭输入流?Add getch();在printfi之后,
printf
中工作,而
循环中没有工作,那么它永远不会收到
EOF
。调试器说什么?
%1d\n
-->
%ld\n