2017-11-14 6 views
0

私の入力ファイルが文字で始まっている場合は、int1を書き換えることができないのでwhileループを停止しますが、これを検出してエラーメッセージを表示すると、workinfile>>int1が機能しなくなり、 ?ifstream whileループでは、入力エラーを表示して次の行で再開する方法は?

cin>>filename; 
ifstream workingfile(filename); 

while (workingfile>>int1>>int2>>string1>>string2) { 
    cout<<int1<<int2<<string1<<string2<<endl; 
    linenumread++; 
} 

任意のヘルプは、それが同様に文字列を読んで停止した場合

while (workingfile>>int1>>int2>>string1>>string2) { 
    if(!(workingfile>>int1)) 
    { 
     cout<<"Error first value is not an integer"<<endl; 
     continue; 
    } 
    cout<<int1<<int2<<string1<<string2<<endl; 
    linenumread++; 
} 

はまた、それを検出することが可能であろういただければ幸い、私はやってみましたが、それは動作しませんか?

入力ファイルは、私はそれが無効な入力に当たったとき、検出したエラーメッセージを表示し、ファイルの次の行に継続することにしたい。この

10 10 ab bc 
11 11 cd ef 
a 
12 12 gh hi 

ようになります。

+0

whileループが無効な入力で停止します:次のようになります

。最良の方法は、ループ条件で 'std :: getline()'を使って完全な行を読み込み、 'std :: istringstream'を使って文字列を解析し、各値を調べることです。 – user0042

+0

ようこそスタックオーバーフロー!あなたのコードは不完全です。特に、main()関数と少なくとも1つの '#include'が欠落しているようです。コードを問題の[mcve]にするようにコードを編集してください。そうすれば、それを再現して解決することができます。 [ask]も読んでください。 –

+1

@TobySpeightここで完全なコードを提供する必要はありません。与えられた例では、問題はかなり明らかです。私は今日、はるかに悪い質問を見た。 – user0042

答えて

5

このような入力の場合、通常、完全な行を読み取り、その行から値を抽出する方がよいでしょう。行を解析できない場合は、その行の失敗を報告し、次の行の先頭から続行します。

std::string line; 
while (std::getline(workingfile, line)) // Read a whole line per cycle 
{ 
    std::istringstream workingline(line); // Create a stream from the line 
    // Parse all variables separately from the line's stream 
    if(!(workingline>>int1)) 
    { 
     cout<<"Error first value is not an integer"<<endl; 
     continue; 
    } 
    if(!(workingline>>int2) 
    { 
     cout<<"Error second value is not an integer"<<endl; 
     continue; 
    } 
    // ^^^^ a.s.o. ... 
    cout<<int1<<int2<<string1<<string2<<endl; 
    linenumread++; 
} 
+0

私は実際にgetlineメソッドを使ってみましたが、別々の変数に分割することはできませんでした。istringstreamについてはわかりませんでした。ありがとうございました。 – Lewis

+0

@Lewis参照:http://en.cppreference。 com/w/cpp/io/basic_istream – user0042

+0

これは私のプロジェクトを大いに助けてくれたことを伝えたいだけで、私はプロジェクトを飛び回っています。 – Lewis

関連する問題