【问题标题】:Why does cin.getline() not work (C++)? [duplicate]为什么 cin.getline() 不起作用(C++)? [复制]
【发布时间】:2015-12-08 19:13:52
【问题描述】:
#include <iostream>
using namespace std;


int main(int argc, char** argv) {

char text[200];
int input;


cin>>input;
if (input == 1)
{
    cin.getline(text, 200);
    cout<<text<<"\n";

}
else if(input == 0)
{
    cout <<"You entered a 0";
}

return 0;
}

我正在尝试制作一个小程序,其中用户输入 1 或 0。如果用户输入 1,那么他可以输入整个句子并将其存储在文本的 char 数组中。我的问题是,当我将 cin.getline() 放在 if 语句中时,它不再起作用。这是为什么呢?

谢谢

【问题讨论】:

  • 在调用getline()之前,您必须从第一个输入操作中读取剩余的换行符。
  • 您必须在读取新的输入之前刷新输入

标签: c++ input output cin


【解决方案1】:

并不是cin.getline() 不起作用。它完全按照要求完成:将文本行读取到下一个换行符。碰巧cin &gt;&gt; input; 读取了一些数字,然后将第一个非数字输入留在了输入缓冲区中——这通常是一个换行符,除非您输入的不是数字。

您可以通过调用cin.ignore() 来解决此问题,这将“读取所有内容直到下一个换行符并将其丢弃”。

理想情况下,您应该决定是要使用cin &gt;&gt; 还是cin.getline(),并使用其中一个,但这意味着然后读取文本字符串并在您的代码中转换为数字,如果您是一个新手,这可能比你真正想要的要复杂一些。

【讨论】:

  • 非常感谢它现在可以工作了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2013-03-05
  • 2012-10-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多