的优先级,高于关系运算符 ==, !=
而赋值运算符的优先级就更低。
所以,printf("%d,%d\n",a>b==c,d=a<b)就等价于:
printf("%d,%d\n",(a>b)==c,d=(a<b))
其中,若a>b为真,则(a>b)的值就是1,否则就是0,把这个结果(1或0),再跟c进行比较,若相等就输出1,否则就输出0。
后面,就是把(a<b)的值就是比较是否小于的结果(1或0)赋值给d保存,并以这个值进行输出。
这个是典型的缓冲区导致的问题。前面的scanf获取的是整形,但是现实中输入完成后会按一下回车,所以最后面还会有一个\n scanf("%d"...)获取的是前面的数字,后面的\n依旧保留在缓冲区内,所以后面的scanf("%c"..)得到的就是\n \n是不等于A的 所以直接跑到else后面去执行了。解决方法就是在scanf("%d"...)后面加个getchar()把缓冲区的\n刷掉。
#include<stdio.h>
main()
{
char mun
int n,i
i=0
printf(" 智力答题测试\n")
printf("************************************\n")
printf("请选择题形:\n1.综合型题\n2.脑筋急转弯\n3.文学\n4.诗歌\n5.历史\n")
printf("\n请输入你的选择:")
scanf("%d",&n)
switch(n)
{
case 1:printf("********************\n")
printf("题1.隋朝有“斗酒诗人”之称的是:\n")
printf("A.杨素\nB.王绩\nC.卢思道\nD.薛道衡\n")
printf("请回答:")
scanf("%c",&mun)
getchar()//加上这个刷掉多余\n
if(mun=='A')
{
printf("\n^o^ 恭喜你,回答正确")
i=i+5
printf(",智力+5。\n当前智力:%d\n",i)
}
else{
i=i-5
printf("\n⊙﹏⊙回答错误。智力-5\n当前智力:%d\n",i)
}break
default:printf("输入有误。")
}
}