为什么getline会跳过第一线?

Osa*_*mal 4 c++

在以下代码中,getline()跳过读取第一行.我注意到在评论" cin >> T"行时,它正常工作.但我无法弄清楚原因.

我想在读取行之前读取整数!如何解决?

#include <iostream>
using namespace std;

int main () {
    int T, i = 1;
    string line;

    cin >> T;

    while (i <= T) {
        getline(cin, line);
        cout << i << ": " << line << endl;
        i++;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*web 8

cin >> T;
Run Code Online (Sandbox Code Playgroud)

这会消耗您在stdin上提供的整数.

你第一次打电话:

getline(cin, line)
Run Code Online (Sandbox Code Playgroud)

...你在整数后使用换行符.

您可以通过在以下行之后添加以下行cinignore到达换行符cin >> T;:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)

(你需要#include <limits>std::numeric_limits)