花木兰55开黑节:C语言的循环语句

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 19:05:30
若输入字符A,在以下while语句执行后ch的值是()
while(ch=getchar()=='A');


答案是0
能解释一下吗

main()
{char ch;
while(ch=getchar()=='A');
printf("%d",ch);
}

答案是0

main()
{char ch;
while(ch=getchar()=='A');
printf("%d",ch);
}
这个程序输出的ch一定会是0,如果ch是1的话,是不可能执行到printf那一句的,因为在while(1)里循环着出不来。
如果你输出的是'A',ch的值是1,但是因为你因为完'A'以后,还要按一次回车,即\n,最后表达式应该为ch=('\n'=='A'),ch就变为0了。当ch变为0后,跳出while循环,继续执行printf("%d",ch);就输出ch的值为0了。

算术运算符(*、 +、 - 、 %、 /)
关系运算符(< <= > >= == !=)
逻辑运算符(! && ||)
赋值运算符(=)
(+=、-=、*=、 /=、%=、)
逗号运算符(,)
条件运算符(?:)
长度运算符(sizeof)
位运算符(~ 、&、| ^)
优先级算术运算符 高于、位移位运算符 高于 关系运算符 高于 位逻辑运算符 高于 逻辑运算符 高于条件运算符 高于 位逻辑自反赋值运算符
位自反赋值运算符优先级等同于算术自反赋值运算符等同于赋值运算符

跟它的优先级有关,== 要大于=,所以先算==!

要想输入'A'时退出,应该用!='A'啊,你用=='A',则输入'A'时当然继续循环了。

ch=getchar()=='A'

很简单,==返回一个布尔值然后赋值给ch,在C里没有布尔类型,布尔型也就是整型

要想退出循环必须条件为假,即输入任意不是'A'的字符都会退出循环,很明显,条件为假,即0被赋给了ch

纯粹是运算符的优先级问题
ch的值是1还是0与你输入的是否为A有关

应该把条件写开:
do{
ch=getchar();
}
while(ch=='A');