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