2014-05-21 70 views
1
char fname[20]; 
    char lname[20]; 
    int grade[10]; 
    double avg=0.00; 

    fstream infile("C:\\Users\\Hady Zn\\Desktop\\hady.txt", ios::in); 
    fstream outfile("C:\\Users\\Hady Zn\\Desktop\\hady1.txt", ios::out); 


    while(infile>>fname>>lname) 
    { 
     outfile<<fname<<" "<<lname<<" "; 
     for(int i=0; i<10; i++) 
      grade[i]=0; 

    for(int i=0; i<10; i++) 
    { 

     infile>>grade[i]; 

     if(grade[i]>=0 && grade[i]<=100) 
     { 
     outfile<<grade[i]<<" "; 
     avg+=grade[i]; 
     } 

    } 

    outfile<<avg/10.00<<endl; 
    avg=0.00; 

    } 

所以現在的問題是,我需要從一個文本文件中讀取一個姓氏(空間)的名字(空間)和10測驗的成績(每間空間等級),並將相同的數據寫入輸出文件,每行末尾有10次測驗的平均值。 即時通訊面臨的問題是,如果我在一條線上少於10次測驗,它將不會顯示剩餘線條(我希望它仍然給我考慮例如如果我被授予7個等級3的等級的平均值將是零)我試着解決它,但它不會工作。任何可以解決這個問題的想法?請幫忙。謝謝閱讀文本文件C++(不能顯示其它線路)

+0

的可能重複[爲什麼從閱讀的std :: istream的一個struct記錄字段失敗,我該如何解決?(http://stackoverflow.com/questions/23047052/why-does-reading -a-struct-record-fields-from-stdistream-fail-and-how-can-i-fi) –

回答

1

爲了執行此類檢查,最好從輸入文件逐行讀取文本並處理每一行以提取數據。

string line 
while (getline(infile, line)) 
{ 
    istringstream sstream(line); 
    sstream >> fname >> lname; 
    if (!sstream) 
    { 
     continue; 
    } 

    outfile<<fname<<" "<<lname<<" "; 
    for(int i=0; i<10; i++) 
    { 
     grade[i]=0; 
     sstream>>grade[i]; 
     if (!sstream) 
     { 
     break; 
     } 

     if(grade[i]>=0 && grade[i]<=100) 
     { 
     outfile<<grade[i]<<" "; 
     avg+=grade[i]; 
     } 
    } 
} 

更新,響應由OP評論:

可避免讀取一行輸入文件中的行和處理每一行。這是我對循環的建議更改。

while(infile>>fname>>lname) 
{ 
    outfile<<fname<<" "<<lname<<" "; 

    for(int i=0; i<10; i++) 
    { 
     grade[i]=0; 
     infile>>grade[i]; 
     if (!infile) 
     { 
     infile.clear(); 
     break; 
     } 

     if(grade[i]>=0 && grade[i]<=100) 
     { 
     outfile<<grade[i]<<" "; 
     avg+=grade[i]; 
     } 
    } 

    outfile<<avg/10.00<<endl; 
    avg=0.00; 

} 
+1

不應該'infile >> line'是'getline(infile,line)'。 – 0x499602D2

+2

更好'while(getline(infile,line))' –

+0

我同意你在線閱讀的想法。但我可以問一下,如果有什麼方法可以繞過琴絃嗎?或者這是唯一可能的方式? – HadyZn