c语言求助?

Python015

c语言求助?,第1张

在C的运算符中,关系运算符>,<,<=,>=

的优先级,高于关系运算符 ==, !=

而赋值运算符的优先级就更低。

所以,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("输入有误。")

}

}