【问题标题】:C++ store string sentences from user input into a vectorC ++将来自用户输入的字符串句子存储到向量中
【发布时间】:2017-09-27 22:30:47
【问题描述】:

我是 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

【问题讨论】:

  • 至于你的问题,能否告诉我们你给程序的输入,以及实际和预期的输出?请花一些时间到read about how to ask good questions
  • getline 得到一整行 - 包括空格。空格是字符串中完全有效的字符...

标签: c++


【解决方案1】:

问题在于循环内的ignore 调用。

std::getline 会默默地吃掉尾随的换行符,但既然您随后调用 ignore,您必须输入 第二 行,ignore 才能满意。

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

【讨论】:

  • 谢谢!它实际上修复了它。另外,感谢您解释它发生的原因
【解决方案2】:

你有没有尝试把 cin.clear(); cin.sync();在getline函数之前? cin 和 getline 在同时使用时会给您带来问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多