繁体   English   中英

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

[英]C++ store string sentences from user input into a vector

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

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;
}

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

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

2)如何解决?

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

输入:

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

输出:

we are
no time
we are

问题是循环内的ignore调用。

std::getline将默默地吃掉尾随的换行符,但是由于您随后调用ignore ,因此必须输入第二行才能使ignore得到满足。

只需从循环中删除ignore调用,它便会按预期工作。

您是否尝试放入cin.clear();? cin.sync(); 在getline函数之前? cin和getline在您同时使用它们时会给您带来问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM