【问题标题】:Getline problem [duplicate]Getline问题[重复]
【发布时间】:2011-09-16 17:53:04
【问题描述】:

我有以下代码:

system("CLS");
string title;
string content;
cout << "Get title." << endl;
getline(cin,title);
cout << "Get content." << endl;
getline(cin,content);

问题是 - 应用程序没有询问标题,我有获取标题,获取内容然后等待用户输入,它不是在获取标题后等待用户输入。b我必须添加任何中断或 smth 吗?
或者,从用户输入中读取整个文本行不是最好的主意?

【问题讨论】:

  • 你为什么不简单地写cin &gt;&gt; title
  • @Mr. TAMER 如果标题中有空格,则执行cin &gt;&gt; 只会使字符最多有一个空格。
  • 您好,erkses,欢迎来到 Stack Overflow。感谢您发布代码,以便我们可以看到您在说什么。将来,在发布代码时,请考虑将您的程序缩减为能够证明您的问题的最小完整示例。在这种情况下,我担心您排除了对回答您的问题至关重要的信息。有关如何以及为何发布完整程序的更多信息,请参阅sscce.org

标签: c++


【解决方案1】:

如果您在拨打system() 之前拨打了cin &gt;&gt; something;

例如,将输入转换为整数。当cin &gt;&gt; myintvar;(或类似)时,整数被放置在myintvar 中,'\n' 被发送到流中。 getline 选择 \n 作为输入行结束的指示,因此它被有效地“跳过”。

要么将cin &gt;&gt; 更改为getline() 或调用cin.ignore() 来获取'\n'(或者更好的是,调用cin.ignore (std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' ); 来刷新输入缓冲区——但请确保您不会在此过程中丢弃有价值的输入)。

【讨论】:

  • 在getline(cin,title)之前忽略;工作,谢谢!
  • @erkses 没问题。你会再次遇到这个,所以要注意它:)
【解决方案2】:

我敢打赌,你有一个类似菜单的东西,用于选择选项(作为数字类型),然后你尝试阅读这些行。

发生这种情况是因为在 std::cin 读取了一些值之后,剩余的 '\n' 尚未处理,解决方案是包含 #include &lt;limits&gt;,然后将 std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n'); 放在您的 getline(cin,title); 之前

【讨论】:

    【解决方案3】:

    这是因为当您使用 getline() 时,它会忽略行尾的换行符并将其输入到输入队列中,因此当您的 getline 函数被下次调用时,它会遇到前一个 getline 丢弃的换行符() ,因此它认为这是您输入字符串的结尾。所以这就是为什么它不接受你的任何输入。你可以使用这样的东西

    getline(cin,title);
    cin.get();
    

    希望这可行。

    【讨论】:

    • 不,getline 读取整行并丢弃换行符。这里的问题是别的。
    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多