【问题标题】:EOF not working in while loop for getchar() in Ubuntu 11.10EOF 在 Ubuntu 11.10 中的 getchar() 的 while 循环中不起作用
【发布时间】:2014-02-21 07:55:11
【问题描述】:
#include <stdio.h>
#ifndef EOF
#define EOF (-1)
#endif

int main(void)
{
    int nb, nl, nt, c;
    nb = 0;
    nl = 0;
    nt = 0;
    while ((c = getchar()) != EOF){
        if (c == ' ')
            ++nb;
        else if (c == '\n')
            ++nl;
        else if (c == '\t')
            ++nt;
    }
    printf("Input has %d blanks, %d tabs, and %d newlines\n", nb, nt, nl);
    return 0;
}

为什么这段代码不起作用?

我在我的 Ubuntu 11.10 上编译了这段代码。如果我将EOF 替换为\n,它会按预期工作,但不能使用EOF。

【问题讨论】:

  • 不使用 EOF 是什么意思?
  • 请缩进?
  • 空格、制表符和换行符的数量没有出现,因为循环是连续的如何停止它
  • 您应该接受其中一个答案,它解决了您的问题。

标签: c ubuntu-11.10


【解决方案1】:

EOFstdio.h 头文件中定义的宏。它是End-of-file 的缩写,表示无法从输入流中读取更多数据的情况。您不应该重新定义宏。它是一个值,对于任何字符ch,表达式ch == EOF 的计算结果始终为false。在 *nix 系统上,您可以通过按 Ctrl + D 键输入此值。在 Windows 系统上,Ctrl+Z 生成 EOF

【讨论】:

    【解决方案2】:

    代码可以正常工作。

    要在终端输入上获得EOF,您必须在行首按Ctrl-D,例如

    $ ./程序
    你好,世界!
    Ctrl-D

    现在程序接收到EOF 并终止while 循环。

    【讨论】:

      【解决方案3】:

      “它不工作”是什么意思?

      首先不要重新定义EOF...

      其次,按Ctrl+D 退出您的应用程序。它对我有用:

      d@reference:~/tmp$ ./a.out 
      a
      s
      f <Ctrl+D>
      Input has 0 blanks, 0 tabs, and 3 newlines
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        • 2012-08-10
        • 2018-06-12
        相关资源
        最近更新 更多