C++ 中的 getline()

getline() in C++

为什么 getline 函数不在此处接受输入?

#include <iostream>
#include <string>
using namespace std;

int main() {
    unsigned n {}, m {};
    cin >> n >> m;

    string set;
    getline(cin, set);
    cout<<set<<endl;
    return 0;
}

提供的输入:

1 5
Hello World

显示的输出:


std::getline(istream&,std::string&) 的工作方式与 cin>>var 不同。 当您使用 cin>>var 时,正确的输入会正确地吸收到 var 中,如果在它之前有一个 space,它会被忽略,但 std::getline 不会忽略 space,所以我们使用 std::cin.ignore() 来忽略 \n。如果你不忽略它,字符串会遇到它,然后不会吸收你的行,因为 std::getline() 在遇到 \n.

时停止
#include <iostream>
    #include <string>
    using namespace std;

    int main() {
        unsigned n {}, m {};
        cin >> n >> m;

        string set;
        cin.ignore();
        getline(cin, set);
        cout<<set<<endl;
        return 0;
    }