2014-11-22 4 views
0

안녕하세요 저는 숫자 등급을 사용자에게 묻는 프로그램을 작성하려고합니다. 그리고 나서 문자를 float에서 문자로 변환합니다. 학년이 B +라고 말할 때부터 단지 +를 반환합니다. 나는 이것이 오직 한 문자 인 숯을 돌려주고 있기 때문에 이것이라는 것을 알고있다. char letterGrade 문자를 변경하려고 시도했습니다. [3]; 하지만이 내게 오류를 제공합니다 : int 형식에서 char [3] 형식을 지정할 때 호환되지 않는 형식. 누군가 내가 잘못 가고 있다는 것을 나에게 말해 줄 수 있다면 정말 기쁩니다.C 프로그램 float 번호를 문자 등급으로 변환

#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

따라서 '입력'이 '79.5'이면 결과는 '' '' ''입니다. 어려운 수업입니다. 프로그래밍이 아니길 바래요. 나는''B + ''를 얻기 위해 @BLUEPIXY와 함께 갈 것입니다. – chux

답변

2

이것은 C의 배열을 할당 할 수 없기 때문입니다. 대신 strcpy() 또는 strncpy()을 사용해야합니다.

//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을 반환 :

또한 다음에 getGrade() 기능을 변경할 수 있습니다. 정확하게 많은 문자를 얻을 알 수

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

감사합니다. 바보가되어서 그 일을 할 수 없었습니다. –