2015-05-01 71 views
-4

我正在用製表符分隔的名字,姓氏和郵政編碼閱讀輸入文件。其中有25個。我正在嘗試讀取它,將其存儲到對象中並再次打印出來。C++讀取文本文件,存儲對象並打印輸出數組

下面的代碼:

// Reading in from an input file 
ifstream inputFile("nameInput.txt"); 
string line; 

for(int i = 0; i<25; i++){ 
    while (getline(inputFile, line)) 
    { 
     istringstream getInput(line); 
     string tempFName, tempLName; 
     int tempZip; 

     getInput >> tempFName >> tempLName >> tempZip; 

     // Creating new Person objects with the data 
     persons[i] = new Person(tempFName, tempLName, tempZip); 
    } 
    inputFile.close(); 
    // Printing out String representation of the Person 
    persons[i]->toString(); 
} 

雖然它編譯,在運行時,這是錯誤我得到:87023
分段故障:11

請幫助!

+0

向我們展示'persons'的聲明。 – LogicStuff

+0

對不起,這裏是:\t //數組聲明 \t人*人[25]; – swati

回答

2

事情是,你只需要一個循環。這將讀取最多25行:

int main() 
{ 
    const int n_persons = 25; 
    std::shared_ptr<Person> persons[n_persons]; 
    std::ifstream inputFile("nameInput.txt"); 
    std::string line; 

    for(int i = 0; i < n_persons && std::getline(inputFile, line); ++i) 
    { 
     std::istringstream getInput(line); 
     std::string tempFName, tempLName; 
     int tempZip; 

     if(getInput >> tempFName >> tempLName >> tempZip) 
     { 
      // Creating new Person objects with the data 
      persons[i] = new Person(tempFName, tempLName, tempZip); 

      // Printing out string representation of the Person 
      persons[i]->toString(); 
     } 
     else 
      cout << "error on line #" << i + 1 << " occurred" << endl; 
    } 
} 
+1

很好的答案。我可能會在閱讀輸入後添加一些檢查以確保有25人被閱讀。 OP似乎沒有跟蹤數組的實際大小,所以它聽起來像是25或者是蕭條。在這種情況下,#define N 25會很有用,可以阻止複製一個幻數。 – AndyG

+0

這項工作。謝謝。我對C++非常陌生。這是第一個實驗室。我會繼續努力。 – swati

相關問題