【问题标题】:About infinite loop(in C++)关于无限循环(在 C++ 中)
【发布时间】:2017-11-09 21:10:20
【问题描述】:

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

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

【问题讨论】:

  • 什么编程语言?
  • 是C++......
  • 如果您希望了解 C++ 的人查看问题,请将其添加为标签,否则他们可能看不到。

标签: c++ loops infinite


【解决方案1】:

当你有

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

它在 [1] 内停止并等待用户输入。 然后用户输入32 并没有发生任何事情。然后用户点击&lt;enter&gt;,输入缓冲区刷新以处理32\n。 程序在第 [1] 行解析 32 并转到第 [2] 行。 \n 有待解析,所以 str 变为空字符串,程序继续前进。

在 linux 上,您可以通过另一种方式使输入缓冲区闪烁。例如按 Ctrl+D。这样你的程序就可以使用了。

解决问题的最佳方法就是拥有

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

或者作为替代方案,您可以在任何地方使用geline 并手动解析字符串。

【讨论】:

    猜你喜欢
    • 2013-12-09
    • 2020-04-01
    • 2016-07-12
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多