C ++将用户输入的字符串句子存储到向量中

时间:2017-09-27 14:14:57

标签: c++

我是C ++的初学者,目前正在学习矢量。这是一个简单的代码,程序获取用户输入并将其存储在向量中,然后继续打印每个元素的存储值:

$ curl -X POST -u "abc*******:123****" 
https://bitbucket.org/site/oauth2/access_token -d grant_type=password 
-d username={abc123@gmail.com} -d password={******}

但是当我运行我的代码时,在用户字符串输入期间,它允许我在最终进入下一个循环之前输入两个字符串。程序只打印出每个循环输入的第一个字符串。所以我的问题是:

1)这背后的原因是什么?为什么用户在进入下一个循环之前需要输入两个字符串?有人可以向我解释。

2)如何解决这个问题?

编辑:这是我的示例输入和输出:

输入:

int main(){
vector<string> myVector;
string myInput;
int n;
cin>>n;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
for(int i = 1; i <= n;i++){
  cout<<"loop count: "<<i<<endl; //added for checking the current loop
  getline(cin, myInput);
  cin.ignore(numeric_limits<streamsize>::max(),'\n');
  myVector.push_back(myInput);
  }
for(unsigned int j = 0;j < myVector.size(); j++){
cout<<myVector[j]<<endl;
}
return 0;
}

输出:

3
input loop count: 1
we are
the champions
input loop count: 2
no time
for losers
input loop count: 3
we are
the champions

2 个答案:

答案 0 :(得分:2)

问题是循环内的ignore调用。

std::getline会默默地占用尾随换行符,但由于您再拨打ignore,因此必须输入第二行以使ignore满意。

只需从循环中移除ignore调用,它就可以按预期工作。

答案 1 :(得分:0)

你试过把cin.clear(); cin.sync();在getline功能之前?当你同时使用它们时,cin和getline会给你带来麻烦。