可能重复:
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);
}
请告诉我为什么不打印?
答案 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)