#include<iostream> #include<string> #include<iomanip> using namespace std; #define max 1000 int main(int argc, char* argv[]) { double result; int i; char line[max]; l: while(cin.getline(line, max)) { int len = string(line).length(); result = 0.0; for(i = 0; i < len; i++,i++) { switch(line[i]) { case 'A':result += 4;break; case 'B':result += 3;break; case 'C':result += 2;break; case 'D':result += 1;break; case 'F':result += 0;break; default: { cout << "Unknown letter grade in input"<< endl; goto l; } } } //cout << setiosflags(ios::fixed) << setprecision(2) << result /(i/2) << endl; cout << fixed << setprecision(2) << result / (i/2) << endl; } return 0; }
///use hash instead of switch-case #include<iostream> #include<string> #include<iomanip> using namespace std; #define max 1000 int main(int argc, char* argv[]) { double result; int i; char line[max]; int hash[6] = {4, 3, 2, 1, 0, 0}; l: while(cin.getline(line, max)) { int len = string(line).length(); result = 0.0; for(i = 0; i < len; i++,i++) { int temp = line[i] - 'A'; if((temp >= 0 && temp <=3) || temp == 5) result += hash[temp]; else { cout << "Unknown letter grade in input"<< endl; goto l; } } cout << fixed << setprecision(2) << result / (i/2) << endl; } return 0; }