1

我是新来的,至少在问问题。总能在这里找到好的答案。试图重新开始编程并重新学习 C 但遇到了奇怪的问题。

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
    ++nc;
    printf("%ld \n", nc);
}

当我运行它时,在我输入任意数量的字符并回车后,它不会打印 nc 的值。按回车后,我可以再次开始打字,好吧,同样的故事。真的看不出有什么问题。它起作用的唯一方法是如果我将 ++nc 和 printf 都放在括号内。但是当我按下回车键时,它给出的值是 1-to-nc,这不是我想要的。我只想要nc。不用说类型也不是问题。提前致谢

4

4 回答 4

7

输入Ctrl-D您的终端以发送EOF. 你可能想要

while (getchar() != '\n')

相反,如果您希望它与 enter 一起使用。

于 2013-06-14T21:19:06.830 回答
3

您需要按 Ctrl-D 才能获得 EOF。

于 2013-06-14T21:19:10.613 回答
1

尝试

while(getchar() != '\n') nc++;

编辑:假设从控制台获取输入, '\n' 就足够了。

于 2013-06-14T21:19:51.407 回答
0

如果您只想在循环中打印 nc,则应在循环中包含 print 语句,如下所示:

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF) {
    ++nc;
    printf("%ld \n", nc);
    }
}

在点击 [enter] 后,每个字符都会打印一次 nc,这可能不是你想要的。

如果要每行打印一次 nc ,请使用 scanf 并执行以下操作:

#include <stdio.h>
#include <string.h>

main()
{
    long nc;
    nc = 0;
    char buf[128];
    while (scanf("%s",&buf) > 0) {
      int len = strlen(buf);
      nc += len;
      printf("%ld \n", nc);
    } 
}
于 2013-06-14T21:51:41.890 回答