2014-09-29 54 views
0

我想要一个程序来读取数据文件中的成绩和其他信息,然后输出每个学生的成绩和平均值,而不是知道有多少学生将在课堂上。如何获取程序来读取数据文件,直到数据文件以C++结尾

我的数据文件看起来像这样:

杰克逊Greaves的1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 100 100

丹尼尔德尔加迪略1 2 3 4 5 6 7 8 9 10 2 2 2 2 2 2 2 2 95 13

Nolyn prestion 10 10 10 10 10 10 10 10 10 10 8 8 8 8 8 8 8 8 100 0

这里是节目我有这么远(它只读第一行,并不会循环读取其他行,如何获得此循环和逐行循环直到文件结束?):

//Lab 1, 9/17/14 
//George W. Bush 
//Miley Cyrus 
//Bob Dylan 

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main() { 
    float lab1, lab2, lab3, lab4, lab5, lab6, lab7, lab8, lab9, lab10; 
    float hw1, hw2, hw3, hw4, hw5, hw6, hw7, hw8; 
    float midterm; 
    float finall; 
    float labScore; 
    float labAvg; 
    float hwScore; 
    float hwAvg; 
    float finalGrade; 
    string letterGrade; 
    string studentNameFirst; 
    string studentNameLast; 
    ifstream inFile; 

    inFile.open("inputGrades.txt", ios::in); // opens input file 
    if (!inFile) { 
     cout << "Cannot open input file. "; // file not open 
     return 1; 
    } 

    while (!inFile.eof()) {// until file ends 
     inFile >> studentNameFirst >> studentNameLast >> lab1 >> lab2 >> lab3 >> lab4 >> lab5 >> lab6 >> lab7 >> lab8 >> lab9 >> lab10 >> hw1 >> hw2 >> hw3 >> hw4 >> hw5 >> hw6 >> hw7 >> hw8 >> midterm >> finall; 

     labScore = ((lab1 + lab2 + lab3 + lab4 + lab5 + lab6 + lab7 + lab8 + lab9 + lab10)/100) * 100; 

     labAvg = (lab1 + lab2 + lab3 + lab4 + lab5 + lab6 + lab7 + lab8 + lab9 + lab10)/10; 

     hwScore = ((hw1 + hw2 + hw3 + hw4 + hw5 + hw6 + hw7 + hw8)/80) * 100; // calculate homework scores 

     hwAvg = (hw1 + hw2 + hw3 + hw4 + hw5 + hw6 + hw7 + hw8)/8; //calculates lab averages 

     finalGrade = (.2 * (labScore) + .1 * (hwScore) + .3 * (midterm) + .4 * (finall)); // calculates percent final grade 

     // Assigns a letter grade based on percent 
     if (finalGrade >= 90) 
      letterGrade = "A"; 

     else if (finalGrade >= 85) 
      letterGrade = "A-"; 

     else if (finalGrade >= 80) 
      letterGrade = "B+"; 

     else if (finalGrade >= 75) 
      letterGrade = "B"; 

     else if (finalGrade >= 70) 
      letterGrade = "B-"; 

     else if (finalGrade >= 65) 
      letterGrade = "C+"; 

     else if (finalGrade >= 60) 
      letterGrade = "C"; 

     else if (finalGrade >= 55) 
      letterGrade = "C-"; 

     else if (finalGrade >= 50) 
      letterGrade = "D+"; 

     else if (finalGrade >= 45) 
      letterGrade = "D"; 

     else if (finalGrade >= 40) 
      letterGrade = "D-"; 

     else letterGrade = "F"; 

     cout << "Name: " << studentNameFirst << " " << studentNameLast << "Lab Average: " << labAvg << "Hw Average: " << hwAvg << "Final Grade: " << finalGrade << "Letter Grade: " << letterGrade << endl; 

     return 0; 
    } 
} 
+1

您期待'eof'预测将来会发生的读取结果,而不是测试您的读取是否成功。 – 2014-09-29 23:02:20

回答

4

你有你的return 0;周期while里面。这就是为什么你永远不会进入这个循环的下一次迭代:你的函数只是返回。

删除此行应该会让事情变得更好。除此之外,检查eof()在您(尝试)读取一些数据之后有意义,而不是在之前(如已经注意到的)。