为什么getline需要额外增加一条线?

时间:2014-09-06 07:35:46

标签: c++ getline

为什么for循环执行m-1次而不是m。 我使用getline()输入字符串而不是cin>>。 这是我的代码。

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstdio>

using namespace std;

int main() {

    int n;
    int m;
    int a;

    cin >> n >> m;

    int arr[10000];

    for(int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    char s[200];

    ostream_iterator<int> screen(cout," ");

    for(int i = 0; i < m; i++) {
        cin.getline(s,20);
        int p = s[2]-48;
        cout << p << endl;
    }
}

2 个答案:

答案 0 :(得分:2)

因为:

cin>>n>>m;

没有从第一行读取行尾字符。

因此第一次通过循环。

cin.getline(s,20);

将读取空行。

PS。更喜欢使用getline()的字符串阅读版本。这样你就可以保证你可以随时阅读一整行。

答案 1 :(得分:1)

在上一次cin>>arr[i]之后,流中还有一个换行符。因此,在没有输入的情况下,新行将在for循环的第一次迭代中分配给s,因此看起来for循环只迭代m-1次。有关说明和解决方案,请参阅此link