【问题标题】:C++ skipping on cin.getline [duplicate]C ++在cin.getline上跳过[重复]
【发布时间】:2015-03-24 18:04:39
【问题描述】:

我的程序输入字符有问题

#include <iostream>
using namespace std;

int  main()
{
int choise;
char word[81];


cin >> choise;
cout << "enter the word:" << endl;
cin.getline(word, 81);

return 0;
}

视觉工作室打开输入​​“选择” 但跳过cin.getline(如果我用gets_s替换它也是一样的)。

我试着写 cin.get();在“getline”之前...... 但随后程序没有得到第一个字符 (如果我输入'aa',它会得到'a') 我能做些什么? 谢谢

【问题讨论】:

    标签: c++


    【解决方案1】:

    这是因为您为程序输入了一个换行符以接受您为choice 输入的整数,所以该换行符不会从缓冲区中提取,而是在您的下一个输入操作中读取。 getline 调用读取剩余的换行符,并对此感到满意。

    有几种方法可以解决您的问题。第一个也是最明显的是将std::string 用于word 变量,然后使用普通输入运算符&gt;&gt;,因为这将跳过前导空格(包括换行符)。

    另一个解决方案是将输入流告诉ignore,直到包含换行符。链接的参考有一个关于如何做到这一点的示例。

    【讨论】:

      【解决方案2】:

      输入整数后按回车,这个回车输入留在缓冲区中,用作 getline 的下一个输入,计算机假设你完成了。 在getline 语句之前添加这一行并重新编译它。 cin.ignore().

      【讨论】:

      • ohhhi put cin.ignore();现在没关系,但告诉我。为什么当我放 cin.get();在“getline”之前,程序没有得到第一个字符(如果我输入'aa',它会得到'a')
      • 我不明白你的意思,因为当我添加cin.get(); 语句时,程序不会表现出你所说的那些行为。解释更多或提出另一个问题。
      猜你喜欢
      • 2012-04-29
      • 2012-09-13
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多