Getline忽略输入的第一个字符

时间:2013-06-09 04:24:22

标签: c++ arrays

我只是从C ++中的数组开始,我在获取数组的第一个字符时遇到了问题。

这是我的代码,

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

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

2-马上我试着小行星

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

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

3 个答案:

答案 0 :(得分:10)

这是cin.ignore的签名:

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

因此,如果在没有任何参数的情况下调用ignore函数,默认情况下它将忽略输入中的'1'char。在这种情况下,它忽略了'J'。删除忽略调用,你会得到'吉姆'。

答案 1 :(得分:4)

只需删除cin.ignore();

这会忽略第一个字符,因此你会错过'J'。

答案 2 :(得分:-1)

我有这段代码的问题是它在第一个周期后吃第一个字符(第一个周期没问题)

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

输出是:

命令产品:&gt;正

cin = pos

命令产品:&gt; pos ...从第二个循环开始删除第一个字符

cin = os

...

如果&#34; cin.ignore();&#34;被评论然后它导致了一个&#34;分段错误&#34;:

命令产品:&gt; cin =

分段错误

为我工作的解决方案:

移动&#34; cin.ignore();&#34;在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);

输出是:

命令产品:&gt;正

cin = pos

命令产品:&gt; pos

cin = pos

...

...

P.S。将代码放在这里真是难以置信......我很失望继续合作。