2017-11-09 18 views
0

これはコード全体の一部です。実行しようとすると、「月入力と支払いを受け取る」まで正常に動作します。しかし、このメッセージの後、私はハッシュのインデックスと "7月の315.14"のような値を入れました。突然、「別のクエリ(Y/N)?」と表示されます。無限ループで私のエラーポイントはどこですか?無限ループについて(C++で)

  unordered_map<string,float> monthly_payment; 
      char query; 
      string month; 
      cout << "Enter number of payments : "; 
      cin >> payNum; 
      cout <<"Enter month and payment received : " << endl; 
      for(int i=0; i<payNum; i++){ 
       getline(cin, month,'\n'); 
       cin >> payment; 
       monthly_payment.insert(pair<string, float>(month,payment)); 
      } 
      cout << "Enter query month : "; 
      getline(cin, month, '\n'); 
      cout << "The payment is " << monthly_payment[month]<<endl; 
      do{ 
       cout << "Another query (Y/N)? "; 
       cin >> query; 
       if(query=='Y'){ 
        cout << "Enter query month : "; 
        getline(cin, month, '\n'); 
        cout << "The payment is " << monthly_payment[month]<<endl; 
       } 
      }while(query!='N'); 
+0

どのようなプログラミング言語ですか? –

+0

これはC++です...... –

+0

C++を知っている人に質問を表示し、それをタグとして追加したい場合は、それ以外の場合は表示されないことがあります。 –

答えて

1

あなたは

int i; 
string str; 
cin >> i;   // [1] 
getline(cin, str); // [2] 

を持っているときに、[1]の中に、ユーザーの入力を待って停止します。 その後、ユーザーは32と入力しても何も起こりませんでした。その後、ユーザは<enter>をヒットし、入力バッファは処理32\nにフラッシュされます。 プログラムは、行[1]で解析された32を行[2]に移動します。 \nが解析されているので、strは空の文字列になり、プログラムは前方に移動します。

Linuxでは、入力バッファを別の方法でフラッシュすることができます。たとえば、Ctrl + Dを押します。あなたはプログラムが使えるようになります。

あなたの問題を解決する最良の方法は、単に

string month; 
double payment; 
cin >> month >> payment; 

を持っているか、代替手段として、あなたはどこにでも gelineを使用することができますし、手で文字列を解析します。

+0

正常に動作します!ありがとうございました! –