a=3!=2和(a=3)!=2的区别,要如何计算?
while((c=getchar())!='\n')和while(c=getchar()!='\n'的差别
c语言有一些很奇怪的语法,比如在一般语言里,a=3是语句,但是c语言它也是表达式,并且值是最左边的那个变量,即3
所以a=3!=2就是3!=2,因为=优先级更高,所以前面加上不加括号,a=3!=2和(a=3)!=2,没区别。
后者同理,c=getchar()!='\n'相当于先让c=getchar()得到输入字符,再判断c是否等于"\n"
但是要记住,写程序的目的是为了给人看的,所以教科书讨论这些东西其实害人不浅!
最佳写法是写成2行,非要写成1行,也最好加上括号(哪怕不加括号结果一样)
在C语言中,a=3!=2和(a=3)!=2的区别是运算符优先级的不同。在这里,!= 运算符的优先级比 = 运算符要高,因此a=3!=2实际上是先计算了3!=2,得到的结果是1,然后将1赋值给了a,因此a的值是1。而(a=3)!=2则是先将3赋值给a,再将a和2进行比较,结果是不相等,因此整个表达式的结果是1。
在while((c=getchar())!='\n')中,先执行了c=getchar(),将输入的字符赋值给了c,然后将c与'\n'进行比较,如果不相等,则继续循环获取输入。而在while(c=getchar()!='\n')中,先执行了'!='运算符,将getchar()得到的字符与'\n'进行比较,得到的结果是一个布尔值(0或1),然后将这个布尔值赋值给了c,因此程序实际上只会执行一次循环,因为c的值只能是0或1,而不是实际输入的字符。
这是个典型的运算优先级问题
赋值运算优先级最低
加了括号把优先级提高了
这不就跟四则混合运算的时候先乘除后加减,如果有括号先算括号,是一样的吗