您好我正在尝试编写一个程序,要求用户提供数字等级,然后将其转换为基本上从浮点数到字符串的字母等级,我有点这样做,除非等级是说B +它只返回+。我知道这是因为我返回的char只有一个字符。我曾尝试将char letterGrade更改为char letterGrade [3];但这给了我错误:从类型int分配类型char [3]时不兼容的类型。感谢有人能告诉我我哪里出错了,因为我对此很陌生。
#include <stdio.h>
#include <string.h>
struct module {
char moduleid[10];
int credit;
float grade;
};
//Convert numeric grade to letter grade
char getGrade (float input){
char letterGrade[3];
if(input >= 80&&input<=100)
letterGrade = 'A';
else if(input >= 70&&input<=79)
letterGrade = 'B+';
else if(input >= 60&&input<=69)
letterGrade = 'B';
else if(input >= 55&&input<=59)
letterGrade = 'B-';
else if(input >= 50&&input<=54)
letterGrade = 'c+';
else if(input >= 40&&input<=49)
letterGrade = 'c';
else if(input >= 35&&input<=39)
letterGrade = 'D';
else
letterGrade = 'F';
return letterGrade;
}
int main( ) {
struct module mod1,mod2;
printf("Please enter: module id, module credit and module grade\n");
scanf("%s%d%f",mod1.moduleid,&mod1.credit,&mod1.grade);
scanf("%s%d%f",mod2.moduleid,&mod2.credit,&mod2.grade);
printf( "Module id\tCredit\t\tGrade\n");
printf("%s\t\t%d\t\t%f\t%s\n",mod1.moduleid,mod1.credit,mod1.grade,getGrade(mod1.grade));
printf( "%s\t\t%d\t\t%f\t%s\n",mod2.moduleid,mod2.credit,mod2.grade,getGrade(mod2.grade));
return 0;
}
答案 0 :(得分:2)
这是因为C中的数组不可分配。您需要改为使用strcpy()
或strncpy()
。
您还可以将getGrade()
功能更改为以下内容:
//Convert numeric grade to letter grade
char* getGrade (float input){
if(input >= 80 && input<=100)
return "A";
else if(input >= 70 && input<=79)
return "B+";
else if(input >= 60 && input<=69)
return "B";
else if(input >= 55 && input<=59)
return "B-";
else if(input >= 50 && input<=54)
return "c+";
else if(input >= 40 && input<=49)
return "c";
else if(input >= 35 && input<=39)
return "D";
else
return "F";
}
或使用static char letterGrade[3]
并返回char*
而不是char
。
您还可以更改用户输入数据的方式:
scanf("%9s%d%f",mod1.moduleid,&mod1.credit,&mod1.grade);
scanf("%9s%d%f",mod2.moduleid,&mod2.credit,&mod2.grade);
通过这种方式,您可以了解尽可能多的字符(不超过9个),用于moduleid
字段。
答案 1 :(得分:1)
char *getGrade (float input){//return type is char *
static char letterGrade[3];//can't use return of auto array
letterGrade[0] = letterGrade[1] = 0;
if(input >= 80)
*letterGrade = 'A';
else if(input >= 70){
*letterGrade = 'B';
letterGrade[1] ='+';
} else if(input >= 60)
*letterGrade = 'B';
else if(input >= 55) {
letterGrade[0] = 'B';
letterGrade[1] = '-';
} else if(input >= 50) {
letterGrade[0] = 'C';
letterGrade[1] = '+';
} else if(input >= 40)
*letterGrade = 'C';
else if(input >= 35)
*letterGrade = 'D';
else
*letterGrade = 'F';
return letterGrade;
}
答案 2 :(得分:0)
char letterGrade[3];
声明后,您无法对字符数组进行赋值。
letterGrade = "A+"; /* Which is wrong */
您需要执行strcpy();
此外,您还要将字符分配给错误的字符串。