我是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
答案 0 :(得分:2)
问题是循环内的ignore
调用。
std::getline
会默默地占用尾随换行符,但由于您再拨打ignore
,因此必须输入第二行以使ignore
满意。
只需从循环中移除ignore
调用,它就可以按预期工作。
答案 1 :(得分:0)
你试过把cin.clear(); cin.sync();在getline功能之前?当你同时使用它们时,cin和getline会给你带来麻烦。