7

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

这是我的代码,

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

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

2-我立即尝试计算数组

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

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

4

3 回答 3

11

这是cin.ignore的签名:

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

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

于 2013-06-09T04:31:46.363 回答
4

只需删除 cin.ignore();

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

于 2013-06-09T04:34:07.560 回答
0

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

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= 位置

...

...

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

于 2017-10-05T18:53:40.333 回答