Ссылка Why is the Console Closing after I've included cin.get()?станд :: CIN :: и почему новая строка остается
Я с использованием std::cin.get()
#include<iostream>
char decision = ' ';
bool wrong = true;
while (wrong) {
std::cout << "\n(I)nteractive or (B)atch Session?: ";
if(std::cin) {
decision = std::cin.get();
if(std::cin.eof())
throw CustomException("Error occurred while reading input\n");
} else {
throw CustomException("Error occurred while reading input\n");
}
decision = std::tolower(decision);
if (decision != 'i' && decision != 'b')
std::cout << "\nPlease enter an 'I' or 'B'\n";
else
wrong = false;
}
Я прочитал basic_istream::sentry и std::cin::get.
Я выбрал вместо этого использовать std::getline
, поскольку цикл while выполняется дважды, потому что поток не пуст.
std::string line; std::getline(std::cin, line);
В ссылке я опубликовал выше состояние в одном из ответов, std::cin
используется для чтения символа и std::cin::get
используются для удаления символа новой строки \n
.
char x; std::cin >> x; std::cin.get();
Мой вопрос почему std::cin
оставить строку \n
на поток?
Зачем читать больше, чем нужно? – chris
В C++ I/O является абстрактным. Концепции консоли нет, и все операции ввода-вывода проходят через один и тот же базовый код. Если вы читали файл, вы не ожидали, что операции ввода-вывода будут линейными, вы ожидаете, что операция ввода-вывода будет читать то, что им нужно, и не более того. То же самое можно сказать и о консольных вводах-выводах. – john
Возможный дубликат [Почему команда cin оставляет «\ n» в буфере?] (Http://stackoverflow.com/questions/28109679/why-does-cin-command-leaves-an-in-the-buffer) –