Getline不能循环使用

时间:2014-02-06 13:54:29

标签: c++ buffer getline

我正在尝试使用

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

2 个答案:

答案 0 :(得分:2)

正如我在评论中建议的那样,您将在cin中留下换行符。因此,当第一次调用getline时,它只读取此空行。换行符仍然存在的原因是因为从cin提取到int(如在cin >> y >> z中)将不会提取以下换行符。但是,getline会提取换行符。

一种解决方案是在提取到ignorey之后使用z

cin >> y >> z;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

这实际上也会忽略换行符之前的任何其他无关字符。

答案 1 :(得分:0)

Documentation on ignore:

没有参数传递,它只会忽略下一个char。我想在第一个换行符之前还有其他字符?