我正在尝试在下一个程序中打印出变量“nc”中的值:
int main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
请告诉我为什么不打印?
我正在尝试在下一个程序中打印出变量“nc”中的值:
int main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
请告诉我为什么不打印?
您的 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.
}
您的 while 循环将继续循环,直到您在 Unix 上使用 Control-D 或在 Windows 上使用 Control-Z,Return 结束输入。它会在不打印任何内容的情况下执行此操作,因为您没有在 ++nc 和 printf 周围使用大括号。
#include <stdio.h>
如果您没有在程序的顶部,您可能还会遇到 printf 问题。如果编译器不知道 printf 是一个可变参数函数,那么它在调用它时将无法正确格式化参数列表。
输入一些输入后
1
2
4
你必须输入,因为它是等效ctrl + D
的 EOF 。ASCII
否则修改程序并放
while(getchar()!='\r') (直到你点击
Enter
)
你是什么意思?有用:
./a.out
asdfsdfasdfasdfasddddddddddddddddddddddd
41
echo "Try to count this" | ./a.out
18
您必须通过停止 getchar 的 while 循环来停止从标准输入读取字符
然后你会看到打印的 nc 值
去做
EOF
= CTRL+ D(对于 Linux)
EOF
= CTRL+ Z(对于 Windows)