2017-05-25 143 views
0

我想讀取names.txt文件中的數據,並輸出每個人的全名和理想體重。使用循環從文件中讀取每個人的姓名,英尺和英寸。 讀取文件:使用getline從文件讀取多行?

Tom Atto 6 3 Eaton Wright 5 5 Cary Oki 5 11 Omar Ahmed 5 9

我使用這下面的代碼:

string name; 
int feet, extraInches, idealWeight; 
ifstream inFile; 

inFile.open ("names.txt"); 

while (getline(inFile,name)) 
{ 
    inFile >> feet; 
    inFile >> extraInches; 

    idealWeight = 110 + ((feet - 5) * 12 + extraInches) * 5; 

    cout << "The ideal weight for " << name << " is " << idealWeight << "\n"; 

} 
inFile.close(); 

當我運行這個即時得到輸出:

The ideal weight for Tom Atto is 185 The ideal weight for is -175

+0

你的問題是什麼? – arslan

+0

爲什麼我得到錯誤的輸出 –

回答

0

你是遇到問題,因爲行後

inFile >> extraInches; 

在循環的第一次迭代中執行,流中仍有一個換行符。下一次撥打getline只需返回一個空行。隨後致電

inFile >> feet; 

失敗,但您不檢查呼叫是否成功。

我想提一些關於您的問題的東西。

  1. 混合未格式化的輸入,用getline,和格式化的輸入,使用operator>>是充滿了問題。躲開它。

  2. 要診斷IO相關問題,請務必在操作後檢查流的狀態。

在你的情況,你可以使用getline閱讀文本行,然後用istringstream從線提取號碼。

while (getline(inFile,name)) 
{ 
    std::string line; 

    // Read a line of text to extract the feet 
    if (!(inFile >> line)) 
    { 
     // Problem 
     break; 
    } 
    else 
    { 
     std::istringstream str(line); 
     if (!(str >> feet)) 
     { 
     // Problem 
     break; 
     } 
    } 

    // Read a line of text to extract the inches 
    if (!(inFile >> line)) 
    { 
     // Problem 
     break; 
    } 
    else 
    { 
     std::istringstream str(line); 
     if (!(str >> inches)) 
     { 
     // Problem 
     break; 
     } 
    } 

    idealWeight = 110 + ((feet - 5) * 12 + extraInches) * 5; 

    cout << "The ideal weight for " << name << " is " << idealWeight << "\n"; 

} 
1

在讀取兩個extraInches值後,在while循環中添加此語句。

inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

它你while循環中讀取第二個整數後忽略'\n'。你可以參考:Use getline and >> when read file C++