一道关于while 循环的题目

来源:百度知道 编辑:UC知道 时间:2024/07/11 05:19:45
#include<stdio.h>
#include<math.h>
void main()
{
int ch;
while (ch=getchar()=='A');
printf("%d",ch);
getch();

}
为什么输出的结果是0???
输入的就是A,结果还是0,不信运行一下

楼上错
楼主请注意
while (ch=getchar()=='A');后面的分号
也就是printf是在循环结束后才打印。
同理要考虑优先集问题
赋值比判断来得低,所以ch=getchar()=='A'相当于ch=(getchar()=='A')
所以最后ch取的是一个逻辑判断值,只可能是1或者0.

第二个注意点
回车键也是一个字符
这样就有两种情况了
第一种你输入A 回车(!!!注意这里的回车)
那么第一次判断成功。但是循环体是空语句,所以没有动作。
第二次把回车键当成字符存起来。不符合。所以跳出
然后打印出ch=0

第二种。你直接输入非A
这样直接跳过while。
此时ch=0
还不清楚来hi我

输入A就是1 不是A就0

ch=bool

不管你输什么,最后总得有个回车吧,回车不等于A,所以表达式:
getchar()=='A'为假,
所以ch=(getchar()=='A'); ch等于0

while (ch=getchar()=='A');分号去掉。不然这句单独构成了循环,当接收到回车,回车不等于'A',ch=0,循环结束,然后printf当然显示0。

#include<stdio.h>
void main()
{
char ch;
while ((ch=getchar())=='A')
printf("%c\n",ch);
getch();

}

修改完了
LZ可参阅