【问题标题】:Why printf() after the while loop would not work?为什么 while 循环后的 printf() 不起作用?
【发布时间】:2021-09-08 05:01:05
【问题描述】:

我是初学者,我最近开始学习 C,这里是“The C Programming Language by Brian W. Kernighan, Dennis M. Ritchie 中的一个示例,我没有理解。该程序应该计算输入中的新行并打印出最终结果。这与书中(第 19 页)中的程序完全相同。它的输出什么都没有。我可以永远输入,它只是换行......

main()
{
    int c, nl;

    nl = 0;
    while ((c = getchar()) != EOF)
        if (c == '\n')
            ++nl;
    printf("%d\n", nl);
}

如果我将 "printf("%d\n", nl)" 语句放在 if 语句的主体中,则每次都会在新行上打印输出,并且 "nl" 的值不会重置。每次我输入内容时它都会增加,并且程序不会终止。

为什么这个例子不起作用?

【问题讨论】:

  • 您需要向您的程序发送换行符。对于 macOS 或 Linux,请按 Ctrl-D。对于 Windows,请按 Ctrl-Z。
  • 它应该如何检测 EOF?
  • 你使用的是什么操作系统?
  • @johnelemans 我没有在这里写“#include ”部分...我的错误,对不起...
  • @iBug 你的意思是EOF,而不是换行符?

标签: c while-loop printf


【解决方案1】:
int main()
{
    int c, nl;

    nl = 0;
    while ((c = getchar()) != EOF)
        if (c == '\n')
            ++nl;
    printf("%d\n", nl);
  return 0;
}

我使用 Code::Blocks 在我的计算机上运行它,它运行良好。也许你只是忘记了 main 之前的 int 并返回 0 ^^

【讨论】:

  • 如果你要挑剔ISO C一致性,它应该是int main(void)
  • 不,这不是问题所在。我在 Windows 上,显然在输入了一些单词和新行之后,我需要按 Ctrl+Z 来打破循环。据我所知,在这样的简单程序中, main() 之前的 int 并没有那么必要;该程序可以正常工作...
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2013-12-16
  • 2020-01-08
相关资源
最近更新 更多