关于无限循环(在C ++中)

时间:2017-11-09 21:10:21

标签: c++ loops infinite

它是整个代码的一部分。当我尝试执行时,它会正常运行,直到“输入月份和付款”。但是在这条消息之后,我把Hash索引和值设置为“July 315.14”。突然,它打印出“另一个查询(是/否)?”在无限循环中。我的错误点在哪里?

          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');

1 个答案:

答案 0 :(得分:1)

当你有

ajaxPromises(['http://yoururl.com','http://yoururl.com'])
  .then(function (result) {
    // do something with result
  })
  .catch(function (error) {
    //  do something with error
  })

在[1]内停止并等待用户输入。 然后用户键入int i; string str; cin >> i; // [1] getline(cin, str); // [2] ,没有任何反应。然后用户点击32并输入缓冲区刷新以处理<enter>。 程序在第[1]行解析32\n并转到第[2]行。它仍然是32解析,因此\n变为空字符串,程序向前移动。

在linux上你可以用另一种方式使输入缓冲区闪存。以Ctrl + D为例。所以程序变得可用了。

解决问题的最佳方法是

str

或者作为替代方案,您可以在任何地方使用string month; double payment; cin >> month >> payment; 并用手解析字符串。