我有一个非常简单的程序如下:
int main() { char c; while (c = getchar() != 'q') printf("%c", c); }
运行此程序时遇到两个问题:
当我运行它时,它不打印c
它已经得到的getchar()
.以下是输出示例:每行都是我的输入,但在获取后不会打印出来:
w r 3
我已经定义q
退出程序.但是当我运行它时,如果我输入多个字符并不重要.如果我输入一个包含其中q
某个位置的字符串,它将退出该程序.例如,以下输入将结束它:
lqw
进入后如何getchar()
回来?q
lqw
问题是运营商优先级.让我们添加括号,以便您了解编译器如何执行它:
c = (getchar()!='q')
!=
优先级高于赋值优先级.因此c
总是分配1或0.要解决此问题,请执行以下操作:
int c; while((c = getchar()) != 'q' && c != EOF)
为什么int
?因为这就是getchar
回报.EOF
不是一个char
,而是一个int
价值.它必须是,因为它应该意味着"没有有效的字符".并且添加了对它的检查,因为如果将输入重定向到程序中,如果'q'
从不在输入流中,则会陷入无限循环.