问一道简单的C语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 18:28:01
#include"stdio.h"
void main()
{
/* 检查输入的一行中有无相邻两字符相同*/
char a,b;
printf("qing shu ru yi hang zi fu\n");
b=getchar();
while(a=getchar()!='\n')
{
if(a==b)
{
printf("same character\n");
break;
}
b=a;
}
}
为什么不管我打什么字符都出来same character这句话

错在这一行while(a=getchar()!='\n')
应该改成while((a=getchar())!='\n')

这是一个运算符优先级的问题,如果不加括号的话C会先算!=,然后将运算结果赋给a,此例中如果输入无相邻相等的一行字符,a会首先被赋成1,然后进入b=a,把b赋成1,然后a又被赋成1,这次当然a==b成立了,输出same character,然后程序结束
搞懂了吧,运算符的优先级是C的重点,也是难点;

附优先级表:
运算符 结合性
() [] -> . 从左向右
! ~ ++ -- - (类型名) * & sizeof 从右向左
* / % 从左向右
+ - 从左向右
<< >> 从左向右
< <= > >= 从左向右
== != 从左向右
& (按位与) 从左向右
^ (按位异或) 从左向右
| (按位或) 从左向右
&& 从左向右
|| 从左向右
?: 从右向左 = += -= *= /= %= &g