2017-05-25 17 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

2つのextraInches値を読み取った後、whileループでこの文を追加します。

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

それはあなたがwhileループの中で読んで2つ目の整数後'\n'を無視します。あなたが参照するかもしれません:Use getline and >> when read file C++

関連する問題