【问题标题】:Getline ignoring first character of inputGetline忽略输入的第一个字符
【发布时间】:2013-06-09 04:24:21
【问题描述】:

我刚开始使用 C++ 中的数组,但在获取数组的第一个字符时遇到了问题。

这是我的代码,

1- 我输入一个名字,例如“Jim”

char name[30];
cin.ignore();
cin.getline(name, 30);

2- 我马上尝试计算数组

    cout<<"NAME:"<<name; // THIS PRINTS 'im'

我确信它会打印“J”。我做错了什么?

【问题讨论】:

  • 刚开始学习,你应该使用std::string和std::getline。他们会让你的生活更轻松。刚刚开始学习,我的意思是担心它们以后如何工作,但仍然继续使用它们。
  • 不管怎样,有可能你只是忽略了一个字符,而没有什么可忽略的,所以它忽略了新输入的第一个字母。
  • 我意识到我根本没有得到第一个字符。为什么会这样?我在其他地方有完全相同的代码,并且输入正确。我不能使用 std::getline 只是因为我在课堂上没有看到它,我必须把它作为一个项目来处理
  • 您可能在其他地方有剩余的输入要忽略。以及std::string之前有什么类使用字符数组(或者请不要说你使用指针)?

标签: c++ arrays


【解决方案1】:

这是cin.ignore的签名:

istream& ignore (streamsize n = 1, int delim = EOF);

所以如果你在没有任何参数的情况下调用忽略函数,它会默认忽略输入中的 '1' 字符。在这种情况下,它忽略了“J”。删除忽略呼叫,您将获得“吉姆”。

【讨论】:

  • 我明白了,但我不确定我是否理解为什么会发生这种情况。我在其他地方有完全相同的代码,忽略它并不会跳过第一个字符
  • @Liso22:在其他代码中调用getline 之前的任何地方,您是否调用过operator&gt;&gt;?如:cin &gt;&gt; something;?请参阅 this question 了解为什么调用 ignore 适合这种情况,但不适用于这种情况。
【解决方案2】:

只需删除 cin.ignore();

这会忽略第一个字符,因此您会错过“J”。

【讨论】:

    【解决方案3】:

    我有这段代码的问题是它在第一个循环之后吃掉了第一个字符(第一个循环没问题)

    do{
        cout << endl << "command:> ";
        string cmdStr1="";
        cin.ignore();
        getline(cin, cmdStr1);
        cout << "cin= " << cmdStr1 << endl; //For Debuging
        //...more code here
    }while(1);
    

    输出是:

    命令:> 位置

    cin= 位置

    command:> pos ...从第二个循环开始删除第一个字符

    cin=os

    ...

    如果“cin.ignore();”被评论然后导致“分段错误”:

    命令:> cin=

    分段错误

    对我有用的解决方案:

    移动“cin.ignore();”在 do-while 循环之前的行。

    cin.ignore();
    
          do{
                std::cout << endl << "command:> ";
                std::string cmdStr1="";
                std::getline(std::cin, cmdStr1);
                std::cout << "cin= " << cmdStr1 << endl; //For Debuging
                //...more code here
        }while(1);
    

    输出是:

    命令:> 位置

    cin= 位置

    命令:> 位置

    cin= 位置

    ...

    ...

    附:在这里放代码真是太难了……我对继续合作感到失望。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多