getline忽略字符串输入的第一个字符

时间:2015-06-10 19:41:04

标签: c++

为什么C ++的getline函数会忽略输入的第一个字符?

this post中,罪魁祸首是cin.ignore(),但我的代码中没有cin.ignore()函数。

这是我正在尝试做的一个非常基本的样本:

#include <iostream>
#include <string>

using namespace std;

int main(){

    string user_input;

    cout << "input: ";
    cin >> user_input;
    getline(cin,user_input);

    cout << "length: " << user_input.length() << endl;
    cout << "your input: " << user_input << endl;

    return 0;
}

问题是,输出是完全错误的:

input: 1 2 3
length: 4
your input:  2 3

显然,包含空格的字符串长度应为5,而不是4。您还可以看到user_input的第一个字符丢失。

有人可以向我解释为什么这段代码输出错误以及我需要做些什么才能解决这个问题?我从来没有使用过包含这样空格的字符串。我很好奇是什么原因引起了这个问题! :)

3 个答案:

答案 0 :(得分:3)

cin >> user_input是罪魁祸首。它抓住输入直到第一个空格摆脱那行代码,你应该只用getline(cin,user_input)设置。

答案 1 :(得分:3)

cin >> user_input;

我不确定你为什么把那条线放在那里,但是它会从cin读取并使用第一个以空格分隔的字符串。所以它读取1.之后,getline读取该行的其余部分,即" 2 3"

答案 2 :(得分:2)

cin >> user_input;正在吃第一个数字。然后getline()出现并获得剩余的输入。删除cin >> user_input;,它应该可以正常工作。