Мне нужно прочитать некоторый ввод, который ограничен пробелами, основная конструкция, которую я использовал для этого, - это :std :: getline пропускает ввод из std :: cin после последнего вхождения разделителя, но не с вводом из std :: istringstream
while(std::getline(std::cin, s, ' ')){
std::cout << s << std::endl;
}
для ввода: «это какой-то текст»
выход для S будет: «это», «есть», «некоторые», таким образом, пропуская последний кусок ввода после последнего пробельные.
Я хочу, чтобы включить последнюю часть ввода в моей программе, так что я пошел искать решение и нашел следующее:
while (std::getline(std::cin, line)) {
std::istringstream iss(line);
while (std::getline(iss, s, ' ')) {
std::cout << s << std::endl;
}
}
Для ввода: «это какой-то текст»
Выход для S будет: «это», «есть», «некоторый», «текст», который именно то, что я хочу.
Вопрос: почему чтение из std :: cin с разделителем пропускает вход после последнего вхождения разделителя, но чтение из std :: istringstream не делает?
Попытка поставить 'зЬй :: CIN >> StD :: skipws;' перед циклом в первом примере и 'станд :: CIN >> станд :: noskipws; 'после цикла. Посмотрите, работает ли это. – HolyBlackCat
Первый пример ждет некоторого '' '', но в конце строки видит только '' '', поэтому он все еще ждет другого '' ''на следующей строке. Во втором случае он попадает в конец потока, поэтому возвращает то, что у него уже есть, даже без конечного '' ''. – BoBTFish
Позвольте мне угадать, что вы не прекратили входной поток при использовании 'std :: cin'. Нажатие кнопки ввода не прекращает считывать данные и далее ожидает ввода. –