为什么循环在第一次迭代中跳过输入?

why loop is skipping input in first iteration?

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

主要功能

int main(){
    long long int T;
    string s;
    cin >> T;
    while(T--){
        getline(cin, s);
        cout << s << endl;
    }
}

while 循环在第一次迭代时跳过输入 只打印空行

我想在每次迭代时将字符串作为输入传递,但在第一次迭代时 while 循环会跳过输入行。

cin >> T 读到数字的末尾,而不是读到行的末尾。

因此,在第一个 getline(cin, s); 中,您阅读了数字之后的其余行。

您可以在 cin >> T; 之后立即调用 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 以忽略该行中剩余的所有内容。

您需要使用 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');,因为它会忽略 "\n"EOF.

之前的其余行

现在 std::numeric_limits<std::streamsize>::max() 基本上是在告诉 cin 要忽略的字符数没有限制。

此外,使用 for 循环可能更有意义。

例如:

#include <iostream>
#include <string>

int main()
{
    long long int T;
    std::cin >> T;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    for (int i = 0; i < T; i--)
    {
        std::string s;
        std::getline (std::cin, s);
        std::cout << s << std::endl;
    }


    return 0;
}

另请查看为什么您不应该使用 using namespace std;