语言C:将数字等级转换为字母等级

时间:2018-05-07 13:30:25

标签: c function

我是编程(C)的新手,我有一个练习,我必须创建一个将欧洲风格等级(1/20到20/20)转换为美式风格等级的功能:例如等级从16到20将是“A”。 我必须将它整合到主程序中,该程序将要求等级转换。

这是我到目前为止所做的,但它不起作用(当我输入1到20之间的数字时,我得到“null”而不是从A到F的字母):

char chartype;
char convert( int i){
    switch(i){
        case 16 ... 20:
        chartype = "A";
        break;
        case 13 ... 15:
        chartype = "B";
        break;
        case 10 ... 12:
        chartype = "C";
        break;
        case 8 ... 9:
        chartype = "D";
        break;
        case 6 ... 7:
        chartype = "E";
        break;
        case 0 ... 5:
        chartype = "F";
        break;
        default:
        chartype = "X";
        break;      
}
}

char convert (int note);

int main(){

    int note;
    char lettre = convert(note);
    printf("Quelle est la note à convertir?\n");
    scanf("%d", &note);


    printf("%s\n", lettre);
    return 0;
}

3 个答案:

答案 0 :(得分:5)

只需使用字符串查找相应的条目:

char convert(int numberGrade ){
   if (numberGrade >=0 && numberGrade  <= 20) {
           // 012345678901234567890      
      return "FFFFFFEEDDCCCBBBAAAAA"[numberGrade];
   }
   return 'X'
}

修改

您还需要将调用移动到转换函数之后输入值。

见下文:

int main(){
    int note;
    printf("Quelle est la note à convertir?\n");
    scanf("%d", &note);
    char lettre = convert(note);

    printf("%c\n", lettre);  // use %c with `char`, not %s
    return 0;
}

答案 1 :(得分:4)

在C中,字符串是字符数组,而"___"表示字符串文字表示字符数组。 '_'是一个角色。字符的格式说明符是%c,用printf语句

编写

试试这个:

char convert( int i){
       if(i>20) return 'X';
       if(i>=16) return 'A';
       if(i>=13) return 'B';
       if(i>=10) return 'C';
       if(i>=8) return 'D';
       if(i>=6) return 'E';
       if(i>=0) return 'F';
       return 'X';
}

int main(){

    int note;
    char lettre;
    printf("Quelle est la note à convertir?\n");
    scanf("%d", &note);
    lettre = convert(note);

    printf("%c\n", lettre);
    return 0;
}

答案 2 :(得分:1)

这不是C中的switch / case语法。您应该为每个数字创建一个案例:

switch(i){
        case 20:
        case 19:
        case 18:
        case 17:
        case 16:
        chartype = "A";
        break;
        ...
}

或者像这样检查if (i <= 20 && i >= 16)

还有其他错误:“A”与“A”不同;你试图转换未初始化的值;您的return函数

中没有convert语句