这个问题在这里已有答案:
嗨伙计们,我从getline获取输入时面临一个未知错误 . 我的目的是从用户输入一个数字和两个字符串作为输入并打印第一个字符串 . 这是问题代码
#include <iostream>
using namespace std;
int main() {
int t;
cin>>t;
while(t--)
{ string s,p;
getline(cin,s);
getline(cin,p);
cout<<s;
}
return 0;
}
现在当我给出如下输入:
1
abababa abb
b
它没有打印任何东西 . 为什么会发生这种情况?
4 回答
在
cin>>t
之后,流中还有一个换行符,然后换行符将被分配给s
,所以cout<<s
似乎什么都不打印(实际上,它会打印一个换行符) .在第一个
getline
之前添加cin.ignore(100, '\n');
来加入换行符 .按_键后
cin >> t;
的换行符在调用getline(cin,s)
时仍在std :: cin中,导致s为空 . 您输入的字符串实际存储在p中 . 在再次使用之前,尝试使用不同的捕获方法或刷新cin缓冲区 .我认为这是因为getline()不会忽略新的行字符,但它会在下一个调用yo getline中读取它 . 试试你在每个calle之前放一个getline(),如下所示:
希望能帮助到你 :)
每次使用cin来获取
cin >> t
中的内容时,它都会在输入缓冲区中留下换行符 . 所以在下一次操作中它会受到影响,并且似乎会跳过"wait for return key"因此异常 . 为了避免使用cin::ignore
.documentation说:
我已经以非常容易理解的方式编写了您的代码但工作如果您有任何问题,请告诉我