我是编程(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", ¬e);
printf("%s\n", lettre);
return 0;
}
答案 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", ¬e);
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", ¬e);
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
语句