c语言判断成绩等级循环结构

我分别用do-while和for写循环结构出现了不同的问题,求大佬告啊
1、do-while
#include<stdio.h>
int main()
{
int a;
char b;
do
{
printf("请输入成绩:");
scanf("%d",&a);
if(90<=a&&a<=100)
printf("A\n");
else
{
if (80<=a&&a<=89)
printf("B\n");
else
{
if (70<=a&&a<=79)
printf("C\n");
else
{
if (60<=a&&a<=69)
printf("D\n");
else
{
printf("不及格\n");
}
}
}
}
printf("是否继续判断(Y/N):");
scanf("%c",&b);
getchar;
}while(b=='Y');
}
最后显示的只有输入的成绩,等级和“是否继续判断(Y/N):”光标在按任意键继续的后面
2、for
#include<stdio.h>
int main()
{
int score;
char grade,b;
int a;
for(;;)
{
printf("请输入成绩");
scanf("%d",&score);
a=score/10;
while(a<0||a>100)
{
printf("数据输入错误,请重新输入");
scanf("%d",&score);
}

switch(a)
{
case 10:printf("A\n");break;
case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break;
case 6:printf("D\n");break;
case 5:printf("E\n");break;
case 4:printf("E\n");break;
case 3:printf("E\n");break;
case 2:printf("E\n");break;
case 1:printf("E\n");break;
case 0:printf("E\n");break;
}
printf("是否继续判断(Y/N):");
scanf("%c",&b);
if(b=='Y')
if(b=='N')break;
}
return 0;
}
这个是在按完Y后循环的是第一次输入成绩后判断的等级

第一种在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时结束 其他任意输入继续 就够了
温馨提示:答案为网友推荐,仅供参考