2015-07-19 284 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

它只打印輸入的最後一個數字,不是全部 –