注册 登录
编程论坛 C语言论坛

新手题,依旧有问题

极客威威 发布于 2020-12-08 15:56, 1943 次点击
/*编写一程序实现以下功能

从键盘输入一个一百分制成绩,如果不在0~100范围内,则要求重新输入数据,直到输入的数据在0~100范围内。

将输入的数据转换成等级‘A’,‘B’,‘C’,‘D’,‘E’,并输出。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’, 60~69分为‘D’,60分以下为‘E’。
不知道问题出哪了????????
*/
#include<stdio.h>
int main()
{
    int i;
    float n;
    for(i=1;;i++)
    {
        scanf("%f",&n);
        if(n>100||n<0)continue;
        else
        {
            printf("score=%.1f,",n);
            if(n>=90)printf("grade=A");
            else if(n<90&&n>=80)printf("grade=B");
            else if(n<80&&n>=70)printf("grade=c");
            else if(n<70&&n>=60)printf("grade=D");
            else if(n<60)printf("grade=E");
        }
        break;
    }
}
7 回复
#2
clb1419148452020-12-08 23:58
使用goto语句,输入有误时,返回原来输入的值,而不是跳过执行,这是我的理解,我也只是小白,也不知道对不对,反正能解决你的问题。
程序代码:

#include <stdio.h>
main()
{
    float n;
begin:
    scanf("%f",&n);
    if(n > 100 || n < 0)
    {
        printf("你输入有误,请重新输入\n");
        goto begin;
    }
    else
    {
        printf("score=%.1f,",n);
            if(n>=90)printf("grade=A");
            else if(n<90&&n>=80)printf("grade=B");
            else if(n<80&&n>=70)printf("grade=c");
            else if(n<70&&n>=60)printf("grade=D");
            else if(n<60)printf("grade=E");
    }
    return 0;
}
#3
风过无痕19892020-12-09 00:16
回复 楼主 极客威威
程序代码:

#include<stdio.h>
int main()
{
    float n;
    while (1)
    {
        scanf("%f", &n);
        if (n > 100 || n < 0)
        {
            printf("非法输入,请继续\n");  // 加上换行符,以便再次输入(下同)
            continue;
        }
        else
        {
            if (n >= 90)
                printf("grade = A\n");
            else if (n < 90 && n >= 80)
                printf("grade = B\n");
            else if (n < 80 && n >= 70)
                printf("grade = c\n");
            else if (n < 70 && n >= 60)
                printf("grade = D\n");
            else
                printf("grade = E\n");
        }
    }
}
#4
极客威威2020-12-09 14:05
不行啊
#5
极客威威2020-12-09 14:06
回复 2楼 clb141914845
我把你的方法试了试,还是一样的错误
#6
apull2020-12-09 19:51
程序代码:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    float n;
    char c[30];
    while (1)
    {
        scanf("%s", c);
        n=atof(c);
        
        if (n > 100 || n < 0 || (c[0]!='0' && n ==0))
        {
            printf("非法输入,请继续\n");
            continue;
        }
        else
        {
            if (n >= 90)
                printf("grade = A\n");
            else if (n < 90 && n >= 80)
                printf("grade = B\n");
            else if (n < 80 && n >= 70)
                printf("grade = c\n");
            else if (n < 70 && n >= 60)
                printf("grade = D\n");
            else
                printf("grade = E\n");
        }
    }
}
#7
clb1419148452020-12-13 16:02
现在这样就可以了,套用while循环,如果输入-1,则跳出循环,输入别的不是1-100的数则重新输入
程序代码:
#include<stdio.h>
main()
{
    int n;
    while( n != -1){
        scanf("%d",&n);
        if( n == -1){
            printf("输入完毕!\n");
        }
        else {
        if(n>100||n<0){
            printf("请重新输入1-100:");
        }else if(n>=90)printf("grade=A\n");
         else if(n<90&&n>=80)printf("grade=B\n");
         else if(n<80&&n>=70)printf("grade=c\n");
         else if(n<70&&n>=60)printf("grade=D\n");
         else if(n<60)printf("grade=E\n");
        }
    }
    return 0;
}
#8
风过无痕19892020-12-13 19:49
回复 4楼 极客威威
怎么就不行?
只有本站会员才能查看附件,请 登录
1