【问题标题】:getline ignores first character of string inputgetline 忽略字符串输入的第一个字符
【发布时间】:2015-06-10 19:41:03
【问题描述】:

为什么 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&gt;&gt;user_input消费了第一个号码吗?

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    cin >> user_input;
    

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

    【讨论】:

      【解决方案3】:

      cin &gt;&gt; user_input 是罪魁祸首。它一直在抓取输入,直到第一个空格摆脱那行代码,您应该只使用getline(cin,user_input)

      【讨论】:

      • 啊,好的。谢谢你向我解释。那很有意思。我犯了一个愚蠢的错误。
      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多