C ++ 11:cin不等待用户输入并结束循环

时间:2017-03-12 00:38:49

标签: c++ c++11 vector tuples cin

我的程序将用户数据作为tuple并将其存储到vector。通过添加tuple s,可以添加vectortupletuple尺寸更改没有限制。该程序询问用户是否要添加另一个#include <iostream> #include <string> #include <tuple> #include <vector> using namespace std; void print(vector<tuple<int, string, string, bool>> const & data) { if (data.size() != 0) { for (auto row : data) { cout << get<0>(row) << ", " << get<1>(row) << ", " << get<2>(row) << ", " << get<3>(row) << endl; } } else { cout << "\nNO ENTRIES CURRENTLY!"; } } int main() { int id; char go; string name, filePath; bool flag = false; typedef tuple<int, string, string, bool> pData; vector<pData> pList; do { cout << "Enter a Pattern Call:" << endl; cin >> id >> name >> filePath >> flag; pList.push_back(make_tuple(id, name, filePath, flag)); cout << "Do You wish to add another: "; cin.ignore(); cin >> go; //The control skips here and exits the loop. } while (go == 'y' || go == 'Y'); print(pList); return 0; } 。如果不是,则循环退出。

我的问题是,当程序应该等待“是”&#39;或者没有&#39;输入,它跳过了cin并退出了循环。

我已经尝试过搜索解决方案,尝试清除缓冲区,但我回到原点。

ionic start 

2 个答案:

答案 0 :(得分:1)

我有一个hack似乎可以在我的Linux机器上运行。

  1. console.log

  2. 之前添加cin.clear()
  3. cin.ignore()替换为cin.ignore()

  4. 您的部分代码应如下所示:

    cin.ignore(1)

答案 1 :(得分:0)

看这里: How do I flush the cin buffer? 如果用户输入不是我们想要的,那么使用cin并不容易或安全。