int main()
{
int nscore = 0
scanf("%d",&nscore)
if ( nscore >90 )
{
printf("成绩优!\n")
}
else if ( nscore >80 )
{
printf("成绩良!\n")
}
else if ( nscore >60 )
{
printf("成绩及格!\n")
}
else
{
printf("成绩不及格!\n")
}
return 0
}
第一种在scanf后面应该加一个getchar你为什么在第二个后面知道加第一个后面不知道加...
因为你在做scanf输入时实际上输入的是 88(成绩) 回车 来结束输入的
这个时候你把88赋值给了a但是 回车还在缓冲区里 如果你不用getchar来吸收回车那么
你第二次scanf时 由于缓冲区里面还有一个回车 所以不等你输入他就将回车赋值给了c
因此无法进行后续循环 你输入的Y/N反而是被getchar读取了
第二种问题和上面类似 在每一个scanf后面加一个getchar来吸收回车
或者使用fflush(stdin)rewind(stdin)来刷新缓冲区
然后你最后判断处出错了
if(b=='Y')
if(b=='N')break
这里满足break的条件是先让b=Y 如果 b = Y判断成功 在判断b=N 当b=Y满足进一步要满足b=N这怎么可能能够break...
应该if(b=='Y') continue
else if(b=='N')break
另外我觉得这个判断有点繁琐了 你只需要判断一种就行了
只保留if(b=='N')break就行了 当输入N时结束 其他任意输入继续 就够了