cin и getline()

cin и getline()

Jovanna avatar Jovanna 72 Точки

cin и getline()

Здравейте,

въвеждам от конзолата много променливи от различен тип.

След n-тото ввеждане, cin и getline отказаха да ми приемат входа и програмата ги подминава , без да търси въвеждане. Конзолата в този момент не приема нищо като се опитвам да въведа choice, иначе курсорът е на позицията, но не може да се въведе, а програмата вече е подминала реда в кода.

За да видя все пак с getline какво взема, се оказа празен стринг. Какви ли варианти не пробвах, чистя буфера, презастраховам се , но не:

        //std::cin >> std::noskipws;
        //std::cin >> choice;

        //std::cin.ignore(10, '\n');
        std::cin.ignore(100, '\n');  

        //std::cin.ignore();  

        std::cin.sync();

        std::string line;        
        getline(std::cin, line);
        if (line.empty()) {
            std::cout << "Your choice: ";       //и пак да видя какво се случва
            std::istringstream iss(line);
            iss >> choice;
        }
        std::istringstream iss(line);
        iss >> choice;

Какъв е този проблем и как да го реша? Някой имал ли е подобен случай?

Какво ли не пробвах, изчетох доста материали в нета, но нищо.  

Какви са правилата при четене на вход, които да ни застраховат от подобни проблеми? 

Тагове:
1
C++ Fundamentals 10/01/2018 20:39:20
Jovanna avatar Jovanna 72 Точки

Много ви благодаря за помощта и съветите!! Явно доста тънкости са с ползването на всички тези оператори  и функции, добре че помагате.

(btw на мен ми се случи същото с judge, на з.1.Sequence/Exam preparation, само че в обратен ред: бях написала целия вход със cin, ==20т, смених всичко с getline() ==100т.)

**

Също, някои други функции оставят '\n' в буфера, разбрах за scanf(), явно много трябва да се внимава, и за всеки отделен вход е различно.

За буфера, остава въпроса, има ли начин да се види/прочете какво точно има в него в определен момент от изпълнението на прорамата?

 

0
11/01/2018 20:18:06
MartinBG avatar MartinBG 584 Точки

Не се сещам за нормален начин да се достъпи съдържанието на конзолният буфер, без да бъде прочетен с getline или по друг начин.

Имай предвид, че може да прочетеш буфера с getline в стринг, който да провериш за каквото те интересува, а после може да подадеш този стринг на stringstream, който да използваш за повторна обработка на входните данни - това е достатъчно за повечето задачи в курса, които имаха специфики във входните данни. 

0
11/01/2018 21:32:59