2016-04-10 6 views
0

イムを使用して標準入力から読み込む:C++、キーボードから別の関数を呼び出すしようとしているが、私はistringstream etc.Hereは私の単純化したコードで、原因CINと知識/経験の私の不足のためにいくつかの問題に直面してきましたistringstream

#include <iostream> 
#include <sstream> 

using namespace std; 

int main(int argc,char **argv) { 

    string line; 
    do { 
     getline(cin,line); 
     istringstream iss(line); 
     string word; 
     iss >> word; 
     if (word == "function") { 
      int id; 
      if (!(iss >> id)) { 
       cout << "Not integer.Try again" << endl; 
       continue; 
      } 
      cout << id << endl; 
      iss >> word; 
      cout << word << endl; 
     } 
     else cout << "No such function found.Try again!" << endl; 
    } while (!cin.eof()); 

    cout << "Program Terminated" << endl; 
    return 0; 
} 
私は現在、対処

2の問題は、以下のとおりです。私は整数を得た場合、私は整数ではない何かを入力すると確認した後にDO-whileループが終了するのはなぜ•

? (例: "function dw25") - 使用する必要があります。 breakの代わりに.Thought breakは外側のif-conditionを終了します。

•id == 25 & word == dwaを取得したくないため、「function 25dwa」と入力したときに発生する問題を解決するにはどうすればよいですか。

+1

あなたが使用しているためhttp://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong DO-whileループが終了する理由 –

+0

理由があります** break ** .if(!(iss >> id)){cout << "整数ではありません。もう一度やり直してください" << endl; ** break; **} –

+0

私は自分自身を見つけ出し、自分の投稿を編集しました。ありがとうございました.2番目の質問の解決策または回避策を見つけようとしています。 –

答えて

1

strtolを使って、idが整数かどうかを確認できます。

#include <iostream> 
#include <sstream> 
#include <stdlib.h> 

using namespace std; 

int main() 
{ 
    string word, value; 
    while ((cin >> word >> value)) { 
     if (word == "function") { 
      char* e; 
      int id = (int) strtol(value.c_str(), &e, 10); 
      if (*e) { 
       cout << "Not integer.Try again" << endl; 
       break; 
      } 
      cout << id << endl; 
      if (!(cin >> word)) 
       break; 

      cout << word << endl; 
     } else { 
      cout << "No such function found.Try again!" << endl; 
     } 
    } 

    cout << "Program Terminated" << endl; 
    return 0; 
} 
関連する問題