printf应该打印出“长”值吗?

时间:2013-01-11 20:58:16

标签: c

  

可能重复:
  Why doesn’t getchar() recognise return as EOF in windows console?

我正在尝试在下一个程序中打印变量'nc'中的值:

int main()

{ 
 long nc;
 nc = 0;

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

请告诉我为什么不打印?

5 个答案:

答案 0 :(得分:5)

你的while循环中没有括号(这就是为什么不使用括号导致容易出错的软件)。因此,值会增加,但不会打印。

尝试:

int main(int argc, char** argv)
{ 
    long nc;
    nc = 0;

    while (getchar() != EOF)
    { // ADD THIS
        ++nc;
        printf("%ld\n", nc); 
    } // AND THIS
}

否则,您的代码基本上是这样做的:

int main(int argc, char** argv)
{ 
    long nc;
    nc = 0;

    while (getchar() != EOF)
    {
        ++nc; // ENDLESSLY ADDING
    }
    printf("%ld\n", nc); // NEVER REACHED DUE TO WHILE LOOP.
}

答案 1 :(得分:3)

你的while循环将继续循环,直到你在Unix或Control-Z上使用Control-D结束输入,在Windows上返回。它会在没有打印任何内容的情况下执行此操作,因为您没有在++ nc和printf周围使用大括号。

如果您在程序顶部没有#include <stdio.h>,则可能还会遇到printf问题。如果编译器不知道printf是一个varargs函数,它在调用时不会正确格式化参数列表。

答案 2 :(得分:3)

输入一些输入后

1 2 4 你必须输入ctrl + D,因为它的EOF ASCII等价物。

否则修改progeam并输入

  

while(getchar()!='\ r')(直到你点击Enter

答案 3 :(得分:1)

你是什​​么意思?它有效:

./a.out 
asdfsdfasdfasdfasddddddddddddddddddddddd
41

echo "Try to count this" | ./a.out 
18

答案 4 :(得分:1)

你必须通过停止getchar的while循环

来停止从stdin读取字符

然后你会看到打印的nc值

要做

EOF = CTRL + D (对于Linux)

EOF = CTRL + Z (适用于Windows)

相关问题