2015-07-19 122 views
0

我遇到的问题是我不知道如何从创建的文本文件中读取特定数字,并在程序中早些时候输入了值。如何从txt文件中读取特定数字C++

我希望使用嵌套循环语句中的值读取之后阅读测验的值,我需要加起来值和平均出来,这需要发生多次

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

using namespace std; 

int main() 
{ 
    string StudentGrades; 
    int studentID; 
    double quiz1; 
    double quiz2; 
    double quiz3; 
    double quiz4; 
    double total=0; 
    double choice; 
    ofstream outFile; 

    cout << "Enter student ID number, Quiz 1 Grade, Quiz 2 Grade , Quiz 3 Grade, Quiz 4 Grade" << endl; 
    outFile.open("StudentGrades.txt"); 
    //while (outFile.open) 
    //{ 
     for (int x = 0; x < 4; x++) 
     { 
      cout << "Enter student ID: "; 
      cin >> studentID; 
      cout << "Enter quiz grade 1: "; 
      cin >> quiz1; 
      //cout << quiz1; 
      cout << "Enter quiz grade 2: "; 
      cin >> quiz2; 
      //cout << quiz2; 
      cout << "Enter quiz grade 3: "; 
      cin >> quiz3; 
      //cout << quiz3; 
      cout << "Enter quiz grade 4: "; 
      cin >> quiz4; 
      //cout << quiz4; 
      cout << endl; 
      //outFile.open("StudentGrades.txt"); 
      if (outFile.is_open()) 
      { 
       cout << "inside if/else outFile" << endl; 
       //outFile << "File successfully open"; 

       outFile << studentID << " " << quiz1 << " " << quiz2 << " " << quiz3 << " " << quiz4 << endl; 

      } 
      else 
      { 
       cout << "Error opening file"; 
      } 

      cout << "Enter 0 for no more students. Enter 1 for more students." << endl; 
      cin >> choice; 
      if (choice == 1) 
       continue; 
      if (choice == 0) 
      { 
       outFile.close(); 
       break; 
      } 

     } 

    //} 
    //declaring file and opening it 






     ifstream inFile; 
     inFile.open("StudentGrades.txt"); 

     while (inFile>>studentID) 
     { 
      cout << studentID<< quiz1 <<quiz2<<quiz3<<quiz4<< endl; 
     } 



    system("pause"); 
    return (0); 
} 
+2

发布您的代码。 –

+1

您应该发布文本文件和代码 – yizzlez

+0

编写符合您需要的代码。 –

回答

1

您没有阅读输入文件中的所有字段,您只能阅读studentID

while (inFile>>studentID) 
{ 
    cout << studentID<< quiz1 <<quiz2<<quiz3<<quiz4<< endl; 
} 

尝试:

while (inFile >> studentID >> quiz1 >> quiz2 >> quiz3 >> quiz4) 
{ 
    cout << studentID << quiz1 << quiz2 << quiz3 << quiz4 << endl; 
} 

更新

下面是我的一个重构的方案建议。创建执行特定任务的函数,然后从更高级别的函数调用它们,而不是将它们全部用一个大函数进行干预是很好的。

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

using namespace std; 

void saveStudentData(string const& filename) 
{ 
    int studentID; 
    double quiz1; 
    double quiz2; 
    double quiz3; 
    double quiz4; 

    // Use int type for choice, not double 
    int choice; 

    ofstream outFile(filename); 
    if (!outFile.is_open()) 
    { 
     // Problem opening file. 
     cout << "Error opening file"; 
     return; 
    } 

    cout << "Enter student ID number, Quiz 1 Grade, Quiz 2 Grade , Quiz 3 Grade, Quiz 4 Grade" << endl; 
    for (int x = 0; x < 4; x++) 
    { 
     cout << "Enter student ID: "; 
     cin >> studentID; 
     cout << "Enter quiz grade 1: "; 
     cin >> quiz1; 
     cout << "Enter quiz grade 2: "; 
     cin >> quiz2; 
     cout << "Enter quiz grade 3: "; 
     cin >> quiz3; 
     cout << "Enter quiz grade 4: "; 
     cin >> quiz4; 
     cout << endl; 

     outFile << studentID << " " << quiz1 << " " << quiz2 << " " << quiz3 << " " << quiz4 << endl; 

     cout << "Enter 0 for no more students. Enter 1 for more students." << endl; 
     cin >> choice; 
     if (choice == 0) 
     { 
     break; 
     } 
    } 
} 

void readStudentData(string const& filename) 
{ 
    int studentID; 
    double quiz1; 
    double quiz2; 
    double quiz3; 
    double quiz4; 
    double total=0; 

    ifstream inFile(filename); 
    while (inFile >> studentID >> quiz1 >> quiz2 >> quiz3 >> quiz4) 
    { 
     total = (quiz1 + quiz2 + quiz3 + quiz4); 
     cout << studentID << " " << quiz1 << " " << quiz2 
      << " " << quiz3 << " " << quiz4 << " " << total << endl; 
    } 
} 

int main() 
{ 
    string filename("StudentGrades.txt"); 
    saveStudentData(filename); 
    readStudentData(filename); 
    return (0); 
} 
+0

当我这样做时,我应该能够将测验1 2 3和4加起来吗?或者我对这一切都是错误的 –

+0

@ConnorLance,是的,你应该能够。 –

+0

它只打印输入的最后一个数字,不是全部 –