为啥错了啊,一直显示输入有错


#include
void main()
{
    char g;float a,b,c,s;
 printf("请输入学生成绩:\n");
 s=0.3*a+0.3*b+0.4*c;
 scanf("平时:%d期中:%d期末:%d",&a,&b,&c);
 while(s>100||s<0)
 {
     printf("输入有误,请重新输入!\n");
     scanf("%f",s);
 }
 if(s>=90) g='A';
else if(s>=80)g='B';
else if(s>=70)g='C';
else if(s>=60)g='D';
else g='E';
printf("成绩为%.1f分,成绩等级为%c。\n",s,g);
}

前面的问题白回复了么???

  
#include<stdio.h>
int main()
{int a,b,c;
 char g;float s;
while(1) {
 printf("请输入学生成绩:\n");
fflush(stdin);
 scanf("平时:%d期中:%d期末:%d",&a,&b,&c);
 s=0.3*a+0.3*b+0.4*c;
 if (s>100||s<0)
 {
     printf("输入有误,请重新输入!\n");
     continue;
 }
 if(s>=90) g='A';
else if(s>=80)g='B';
else if(s>=70)g='C';
else if(s>=60)g='D';
else g='E';
printf("成绩为%.1f分,成绩等级为%c。\n",s,g);
return 0;
}
return 0;
}
 

这段代码有以下几个问题:
(1)在输入时,使用了 %d 格式化符号来读取浮点数,应该使用 %f 格式化符号。
(2)在对 s 进行输入检验时,应该使用 %f 格式化符号来读取浮点数。
(3)没有对变量 a、b、c 进行输入检验,可能会导致非法输入。
(4)在判断成绩等级时,如果学生的成绩恰好为 60、70、80 或 90 分,会出现错误的等级。
(5)在最后一行输出时,应该使用 %f 格式化符号来输出 s。

可以如下改动:

#include <stdio.h>

int main() {
    float a, b, c, s;
    char g;
    printf("请输入学生成绩(平时成绩 期中成绩 期末成绩):\n");
    scanf("%f %f %f", &a, &b, &c);
    s = 0.3 * a + 0.3 * b + 0.4 * c;
    while (s > 100 || s < 0) {
        printf("输入有误,请重新输入!\n");
        scanf("%f", &s);
    }
    if (s >= 90) g = 'A';
    else if (s >= 80) g = 'B';
    else if (s >= 70) g = 'C';
    else if (s >= 60) g = 'D';
    else g = 'E';
    printf("成绩为 %.1f 分,成绩等级为 %c。\n", s, g);
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/733728
  • 这篇博客也不错, 你可以看下一招解决树莓派系统黑边(没有填满显示器)的问题
  • 除此之外, 这篇博客: 整数的表示中的 无符号整数和有符号整数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    当一个编码的所有二进位都用来表示数值,而没有符号位时,该编码表示的就是无符号整数,此时默认为正。
    带符号整数就是必须有一个符号位。
    正由于此相同位数情况下,无符号数比带符号数所能表示的范围大。(不作解释)
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^