c++ std::getline on std::cin

piok6c0g  于 2023-05-30  发布在  其他
关注(0)|答案(3)|浏览(178)

是否有充分的理由:

std::string input;
std::getline(std::cin, input);

getline调用不会等待用户输入?cin的状态是否以某种方式混乱了?

nnvyjq4y

nnvyjq4y1#

最有可能的是,您在阅读其他数据(例如int)之后尝试读取字符串。
考虑输入:

11
is a prime

如果您使用以下代码:

std::cin>>number;
std::getline(std::cin,input)

getline将只读取11之后的换行符,因此你会得到这样的印象:它没有等待用户输入。
解决这个问题的方法是使用一个伪getline来消耗数字后面的新行。

e7arh2l6

e7arh2l62#

我测试了下面的代码,它工作正常。

#include <iostream>
using namespace std;
int main()
{
    string  input;
    getline(cin, input);
    cout << "You input is: " << input << endl;
    return 0;
}

我猜在你的程序中,你可能已经有一些东西在你的输入缓冲区。

5f0d552i

5f0d552i3#

此代码不起作用:

#include <iostream>
#include <string>

int main()
{
int nr;
std::cout << "Number: ";
std::cin >> nr;

std::string  input;
std::cout << "Write something: ";
getline(std::cin, input);
std::cout << "You input is: " << input << std::endl;

return 0;
}

现在它工作了:

#include <iostream>
#include <string>

int main()
{
int nr;
std::cout << "Number: ";
std::cin >> nr;

std::string x;
std::getline(std::cin,x);

std::string  input;
std::cout << "Write something: ";
getline(std::cin, input);
std::cout << "You input is: " << input << std::endl;

return 0;
}

相关问题