2014-11-22 83 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