我想寫一個C++程序,從文本文件中讀取輸入,並使用十點分級比例分配成績,然後在屏幕上打印結果。 我覺得我的問題可能是函數deriveGrade中的if else語句,而不是遞增枚舉,他們似乎在總結增量。任何幫助將不勝感激,謝謝。從文件如何避免這些if else else複合語句?
#include <iostream>
#include <string>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;
int deriveGrade(double avarage);
enum letter_grade { A, B, C, D, F };
namespace tenPoint
{
letter_grade deriveGrade(double avarage);
char grade;
}
using namespace tenPoint;
int main()
{
string name;
double average;
ifstream inData; // Is the variable for input data from the file.
inData.open("student_status.txt", ios::in);
while (!inData.eof())
{
getline(inData, name);
inData >> average;
inData.ignore();
grade = ::deriveGrade(average);
cout << name << " " << average << " " << char(grade) << endl;
}
inData.close();
return 0;
}
int deriveGrade(double average)
{
if (average >= 90)
{
grade = static_cast<letter_grade>(grade + 65);
}
else if (average >= 80 && average < 90)
{
grade = static_cast<letter_grade>(grade + 1);
}
else if (average >= 70 && average < 80)
{
grade = static_cast<letter_grade>(grade + 2);
}
else if (average >= 60 && average < 70)
{
grade = static_cast<letter_grade>(grade + 3);
}
else if (average <= 50)
{
grade = static_cast<letter_grade>(grade + 4);
}
else
{
cout << "Invalid entry." << endl;
}
return grade;
}
輸入:
李四,約翰K.
93.2
安德魯斯,蘇珊S.
84.7
夢露,瑪麗蓮
75.1
加斯頓,阿瑟C.
62.8
哈波,瓊妮Y.
42.7
生薑,弗雷德T.
95.8
程序輸出:
DOE,約翰K. 93.2甲
安德魯斯,蘇珊S. 84.7乙
門羅,瑪麗蓮75.1 d
加斯,亞瑟C. 62.8ģ
Harpo,Joanie Y. 42.7 K
Ginger,Fred T. 95.8 012
按任意鍵繼續。 。 。
自修復我的代碼請求以來的脫離主題。用你所有的警告和調試信息編譯你的代碼(例如'g ++ -Wall -Wextra -g'和[GCC](http://gcc.gnu.org/)...)然後**使用調試器**(例如'gdb')一步一步地運行程序並查詢其內部狀態,從而瞭解發生了什麼。 –
[這樣的東西應該可以工作](http://coliru.stacked-crooked.com/a/9db9ae1fc75bc11d),idk爲什麼你有這個函數的多個聲明和多個不同返回類型的命名空間,這只是令人困惑。 – Borgleader
查看匿名命名空間。我想你會得到你想要得到的東西,而不必在之後立即使用using語句。 – user4581301