Софтуерно Инженерство
Loading...
javor_tzvetkov8787 avatar javor_tzvetkov8787 1 Точки

Проблем с getline

Имам проблем с getline. Не ми работи кода, дори примерна задача (решена) взета от zip файла предоставен от СофтУни не тръгва. Рових се по форуми и накрая видях решение. Трябва да добавя на предходния ред cin.ignore () . По този начин кода работи, но не зная къде ми е проблема. Дали в компилатора, който ползва моята версия на Код блокс или е нещо друго. Моля някой да сподели ако знае нещо по въпроса.

Тагове:
0
Programming Basics with C++
MartinBG avatar MartinBG 1169 Точки
Best Answer

Тук има много детайлен отговор на въпроса с няколко варианта за решаването на проблема.

Накратко, при четене от стрийм по този начин std::cin >> myVar в std::cin остава символа за нов ред като следващ символ. 

getline чете всичко от стрийма, докато не попадне на символа за нов ред, който в този случай е първи, т.е. getline ще прочете празен стринг.

За заобикаляне на проблема може да се използва std::cin.ignore() (или std::cin.get()), след като сме използвали std::cin >> myVar, като по този начин ще премахнем символа за нов ред.

По-сигурен и удобен начин е този:

std::string line;
std::getline(std::cin >> std::ws, line)

std::cin >> std::ws ще премахне всички празни символи в началото на стрийма (ако има такива) и едва след това ще се изпълни getline, който ще прочете в line всички останали символи до срещанео на следващ символ за нов ред в стрийма.

Трябва да се има предвид, че този вариант не е удачен, когато по някаква причина искаме да запазим и прочетем и празните символи.

0