【问题标题】:Why is this not producing any output when using printf()?为什么在使用 printf() 时不产生任何输出?
【发布时间】:2013-05-02 10:20:10
【问题描述】:

我现在正在使用 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,但这似乎不起作用。如果这有什么不同,我会在 Windows 7 的 cmd 行之外运行它。

【问题讨论】:

  • 你是如何关闭输入流的?
  • 添加 getch();在 printf 之后
  • 如果您的printfwhile 循环内工作但不在循环外,那么它永远不会收到EOF
  • 你的调试器说什么?
  • "%1d\n" ---> "%ld\n"

标签: c


【解决方案1】:

您的程序运行良好。

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

./a.out <myfile.txt

(这也适用于 Windows)

或者,如果您自己输入输入内容,请输入 &lt;return&gt;&lt;ctrl-D&gt;&lt;return&gt; 以发送 EOF。 (或在 Windows 上为 &lt;return&gt;&lt;ctrl-Z&gt;&lt;return&gt;

这应该会按预期工作。

➤ 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 的示例会话。

【讨论】:

    【解决方案2】:

    对于getchar 要返回EOF,您需要“关闭流/到达流的末尾”。查看此问题的答案:C : How to simulate an EOF?

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

    例如Linux下:

    $ cat some_file.txt | ./a.out
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2013-04-06
      相关资源
      最近更新 更多