【问题标题】:Simple getline and cin ignoring the first character忽略第一个字符的简单 getline 和 cin
【发布时间】:2018-02-28 11:58:03
【问题描述】:

我正在尝试将这些输出分开,但第二个输出的第一个字符被忽略了。

输入:

1

1 2 3

输出:

(空格)2 3

预期输出...

1 2 3

#include <iostream>

using namespace std;


int main()
{
    string a; cin >> a;
    string s; cin >> s;
    getline(cin, s);
    cout << s;
}

【问题讨论】:

  • cin &gt;&gt; s; getline(cin, s); - 你认为这是做什么的?
  • 当然可以。您首先将"1" 读入a,然后将第二个"1" 读入s,最后将行的其余部分(" 2 3")读入s覆盖 s 中已有的内容。然后你打印s
  • @Mat 读取整行?
  • @Idk 不,它从当前位置读取到行尾,根本不是一回事。
  • @Idk:没有。那里有两种说法。每个人的作用是什么?

标签: c++ cin cout getline


【解决方案1】:

这个程序产生所需的输出

#include <iostream>

using namespace std;

int main()
{
    string a; cin >> a;
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    string s;
    getline(cin, s);
    cout << s;
}

cin.ignore() 的调用移至下一行,因为您仍在cin &gt;&gt; a; 之后的上一行。您可以执行 string dummy; getline(cin, dummy); 之类的操作,但 ignore 会避免使用不必要的变量。

【讨论】:

  • 这不是真正的问题,特别是因为 OPs 代码中的第二个 &gt;&gt; 操作将跳过前导空格(包括第一行的换行符)。虽然这解决了 OP 询问 的内容(因为它显示了想要的输出),但它可能无法解决导致问题的 真正的 问题。
  • @Someprogrammerdude 我认为cin &gt;&gt; s; 是处理cin.ignore(...); 解决的问题的有缺陷的尝试。只有 OP 才能说这是否是真正的问题。
  • 您如何知道 OP 真正想要什么? OP从未提及他或她为什么这样做。也许OP需要单独的第二行的第一个子字符串以及整行?我们只是不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2021-07-24
  • 2014-12-06
  • 2013-08-23
相关资源
最近更新 更多