2014-09-07 3 views
-1

그레이드 계산기에서 문제를 찾아내는 데 도움이 필요합니다. 이 프로그램은 사용자가 "A 또는 a"와 같은 문자 등급을 입력 할 때 출력이 4.0 인 경우 작동합니다. 하지만 내가 문제가되는 문제는 사용자가 "A + 또는 A-"를 "+ 또는 - add가 0.3 또는 -0.3을 문자 등급"으로 삽입 할 때 PLus 또는 Minus 값을 더하지 않는다는 것입니다.C++ 그레이드 계산기 이슈

const double Plus = 0.3; 
const double Minus = 0.3; 



/** 
* Letter grades are A, B, C, D, and F, possibly followed by + or –. 
* Their numeric values are 4, 3, 2, 1, and 0. In our scheme, there is no F+ or F–, 
* or A+. Adding a + to the grade increases the numeric value by 0.3, a – decreases it 
* by 0.3. 
* 
* Input: The letter of Grade with + or -. 
* Output: The value of inserted grade. 
* 
* @param cin the standard input stream. 
* @param cout the standard output stream. 
* @return 0 for success. 
*/ 
int run(istream& cin, ostream& cout) 
{ 
    // Enter your letter grade: C+ 
    //Grade value is[2.3] 
    char list [26] = { "A, B, C, D, F, a, b, c, f" }; 
    char grade; 
    double value; 

    cout << "Enter your letter grade: "; 
    cin >> grade; 

    cout << fixed << setprecision(1); 

    if ((grade == 'A' || grade == 'a')){ 
     value = 4.0; 
    } 
    else if ((grade == 'A+') || (grade == 'a+')){ 
     value = 4.0 + 0.3; 
    } 
    else if (grade == 'A-' || grade == 'a-'){ 
     value = (4.0 - Minus); 
    } 
    else if (grade == 'B' || grade == 'b'){ 
     value = 3.0; 
     if (grade == 'B+' || grade == 'b+'){ 
      value = (3.0 + Plus); 
     } 
     else if (grade == 'B-' || grade == 'b-'){ 
      value = (3.0 - Minus); 
     } 
    } 
    else if (grade == 'C' || grade == 'c'){ 
     value = 2.0; 
     if (grade == 'C+' || grade == 'c+'){ 
      value = (2.0 + Plus); 
     } 
     else if (grade == 'C-' || grade == 'c-'){ 
      value = (2.0 - Minus); 
     } 
    } 
    else if (grade == 'D' || grade == 'd'){ 
     value = 1.0; 
     if (grade == 'D+' || grade == 'd+'){ 
      value = (1.0 + Plus); 
     } 
     else if (grade == 'D-' || grade == 'd-'){ 
      value = (1.0 - Minus); 
     } 
    } 
    else if (grade == 'F' || grade == 'f'){ 
     value = 0.0; 
     if (grade == 'F+' || grade == 'f+'){ 
      value = (0.0 + Plus); 
     } 
     else if (grade == 'F-' || grade == 'f-'){ 
      value = (0.0 - Minus); 
     } 
    } 
    else if (!(grade == list[26])){ 
     cout << "INVALID LETTER GRADE" << endl; 
     value = 0; 
    } 

    cout << "Grade value is [" << value << "]" << endl; 


    return 0; 
} 
+1

'char 등급 '이므로 ** A + **에서'A '만 캡처합니다. .. – DOOM

+0

모든 경고가 활성화 된 상태에서 컴파일하십시오. A +는 몇 자입니까? – Leiaz

+0

스위치 케이스를 사용하는 것이 더 좋습니다 .. 너무 많은 오류가 있습니다 ... 코드가 + 또는 -를 확인하지 않습니다 – mlwn

답변

0

은 간단하려면 :

귀하의 문제는 등급이 char하고 'A+' 저장할 수 있습니다 여기에

내가 가진 것입니다 (이 문자를 'A'를, '+') . char gradestd::string grade으로 변경하십시오 (반드시 <string> 포함해야 함). 정상적으로 작동합니다.

0

A+ 또는 A-은 두 문자이므로 하나의 char 변수에 저장할 수 없습니다. 두 변수를 사용할 수 있습니다 (두 번째 변수에 저장할 내용이 없으므로 + 또는 -을 입력하지 않은 경우 문제가 될 수 있음). std::string을 사용하여 입력 한 내용을 저장 한 다음 확인하십시오. 그 안에 + 또는 -이있는 경우

또한 모든 if 문을 단순화하여 switch-case 블록을 사용하거나이 트릭을 사용하여 문자 등급에서 바로 성적을 얻을 수 있습니다. 소문자를 들어 gradePoint = 4.0 - (letter - 'A')

: 대문자를 들어

gradePoint = 4.0 - (letter - 'a')

은 그냥 인해 E이 성적 생략되고 별도 대한 확인 및 F를 포함해야합니다 있습니다.