我正在尝试使用
getline(cin, x)
在for循环中。
但是,第一次运行时,它只返回一个空行。
有很多这样的问题,我试过了两个
cin.ignore() and cin.clear()
正如所建议的那样,甚至尝试在中间再使用一个getline来清除缓冲区,但无济于事。
还有其他技巧吗?
由于
char x;
cin >> x;
int y, z;
cin >> y >> z;
cin.ignore(numeric_limits<streamsize>max(), '\n');
for (int a = 0; a < z; a++){
for(int b = 0; b < y; b++){
string hello;
getline (cin, hello);
etc etc
答案 0 :(得分:2)
正如我在评论中建议的那样,您将在cin
中留下换行符。因此,当第一次调用getline
时,它只读取此空行。换行符仍然存在的原因是因为从cin
提取到int
(如在cin >> y >> z
中)将不会提取以下换行符。但是,getline
会提取换行符。
一种解决方案是在提取到ignore
和y
之后使用z
:
cin >> y >> z;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
这实际上也会忽略换行符之前的任何其他无关字符。
答案 1 :(得分:0)
没有参数传递,它只会忽略下一个char。我想在第一个换行符之前还有其他字符?