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

标签 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 的第一个字符丢失了。

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

最佳答案

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

关于c++ - getline 忽略字符串输入的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30765802/

相关文章:

c++ - 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题

c# - 如何在C++中调用C#代码

c++ - 如何有效地避免使用 goto 和中断嵌套循环

c++ - 在 Linux/C++ 中,发送到线程/进程的信号是否使其变为事件状态?

c++ - Qt:类中变量的默认值

c++ - 错误 : Redefinition of Class (C++)

c++ - 试图修改只读数据集字段

c++ - 构造函数问题

c++ - 如何在 Windows x64 C++ 应用程序中捕获堆栈溢出

c++ - 位图边界矩形算法 C++