Getline игнорирует первый символ ввода

Я только начинаю с массивов на C++ , и у меня проблема с получением первого символа массива.

Это мой код

1-я ввожу имя, такое как "Джим"

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

2-сразу же я пытаюсь cout массив

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

Я был уверен, что он напечатает "J". Что я делаю не так?

3 ответов


вот подпись cin.игнорировать:

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

поэтому, если вы вызываете функцию ignore без каких-либо параметров, она будет игнорировать '1' char по умолчанию от ввода. В этом случае он проигнорировал 'J'. Удалите игнорировать вызов, и вы получите "Джим".


просто удалите cin.ignore();

это игнорирует первый символ, таким образом, вы пропустите "J".


у меня был этот кусок кода с проблемой, что он ел первый символ после первого цикла (первый цикл был в порядке)

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

вывод:

команда: > pos

cin= pos

команда:> pos ... из 2-го цикла он начал удалять 1-й символ

cin= os

...

If " 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);

вывод:

команда: > pos

cin= pos

команда: > pos

cin= pos

...

...

P. S. Это было невероятно трудно выложите здесь код... Я разочарован продолжением сотрудничества.