#include <iostream>
using namespace std;
void PrintGrade(float credit, char* gradePtr)
{
if (gradePtr[1] == 43) // +
{
credit = credit + 0.3;
cout << credit;
}
else if (gradePtr[1] == 45) // -
{
credit = credit - 0.3;
cout << credit;
}
else if (gradePtr[1] == 48) // 0
{
credit = credit;
cout << credit;
}
}
int main()
{
cout << fixed;
cout.precision(1);
char grade[3];
char* gradePtr = grade;
cin >> grade;
float credit = 0;
switch (grade[0])
{
case 65: // A
credit = credit + 4;
PrintGrade(credit, gradePtr);
break;
case 66: // B
credit = credit + 3;
PrintGrade(credit, gradePtr);
break;
case 67: // C
credit = credit + 2;
PrintGrade(credit, gradePtr);
break;
case 68: // D
credit = credit + 1;
PrintGrade(credit, gradePtr);
break;
case 70: // F
credit = credit;
cout << credit;
break;
}
}
- 학점을
char grade[3]
으로 받아온다.
- 계산된 학점을 출력할 변수
float credit
을 만든다.
- switch-case-break 문을 통해 학점의 알파벳에 따라 평점을 나눈다.
이 때 case 뒤에 쓰인 숫자는 알파벳의 ascii 코드이다.
- 학점의 '+', '-', '0'을 읽어 평점을 계산한다.
이 메커니즘을 함수void PrintGrade()
로 만들어 코드의 중복을 줄였다.
함수의 인자는 2개이다.
float credit
의 정보를 가져와서,
char* gradePtr
를 통해 grade문자열의 2번째 자리를 읽어온다.
2번째 자리의 종류에 따라credit
을 계산하여 출력한다.
- 만약 학점이 F일 경우,
credit
의 초기값 0을 그냥 출력해준다.
소수점 한자릿수까지 출력하기 위해
int main()
함수가 시작할 때cout << fixed; cout.precision(1);
를 넣어주었다.
이 때fixed
를 넣어주지 않으면precision
이 정수자리를 포함해 자릿수를 세게됨을 주의한다.