簡體   English   中英

C程序將浮點數轉換為字母等級

[英]C Program Convert float number to letter grade

嗨,我正在嘗試編寫一個程序,要求用戶輸入數字等級,然后將其基本上從浮點數轉換為字符串,然后將其轉換為字母等級,除了等級說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;
   }

這是因為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);

這樣,您將知道可以為moduleid字段獲得盡可能多的字符(不超過9個)。

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;
}
char letterGrade[3];

聲明字符數組后,您不能對其進行賦值。

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

您需要做一個strcpy();

而且,您正在將字符分配給錯誤的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM