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'. Удалите игнорировать вызов, и вы получите "Джим".
у меня был этот кусок кода с проблемой, что он ел первый символ после первого цикла (первый цикл был в порядке)
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. Это было невероятно трудно выложите здесь код... Я разочарован продолжением сотрудничества.