繁体   English   中英

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

[英]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的示例会话。

control-Z与minGW合作

为了使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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM