std :: getline on std :: cin

时间:2011-07-25 16:08:18

标签: c++ getline cin

有什么好的理由:

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

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

3 个答案:

答案 0 :(得分:5)

在阅读其他一些数据后,您很可能会尝试读取字符串,例如int

考虑输入:

11
is a prime

如果您使用以下代码:

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

getline只会在11之后读取换行符,因此您会得到不等待用户输入的印象。

解决此问题的方法是使用虚拟getline来使用数字后的新行。

答案 1 :(得分:2)

我已经测试了以下代码,它运行正常。

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

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

答案 2 :(得分:0)

此代码不起作用:

#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;
}