2014-11-22 60 views
0

嗨我正在尝试编写一个程序,要求用户输入一个数字等级,然后将其转换为字母等级,基本上是从一个浮点数转换为一个字符串,我有这种工作方式从等级说B +它只返回+。我知道这是因为我返回的字符只是一个字符。我曾尝试将char letterGrade改为char letterGrade [3];但是这给了我错误:从int类型分配类型为char [3]时的不兼容类型。欣赏是否有人能告诉我我要去哪里,因为我对此很陌生。C程序将浮点数转换为字母等级

#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; 
    } 
+2

所以如果'input'是'79.5',结果就是''F''。这是一个艰难的课 - 希望它不是编程。我将与@BLUEPIXY一起获得一个“B +”。 – chux 2014-11-22 23:39:02

回答

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领域。

0
char letterGrade[3]; 

声明后无法对字符数组进行赋值。

letterGrade = "A+"; /* Which is wrong */ 

你需要做一个strcpy();

,你也被分配一个字符的字符串这是错误的。

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; 
} 
+0

谢谢大家现在感觉很傻,我无法解决这个问题。 – 2014-11-23 16:51:14