Считывание чисел до конца строки с помощью cin.peek()

123
17 ноября 2020, 11:00

Мне нужно считать числа до конца строки, я реализовал это с помощью cin.peek():

int a;
while(cin.peek() != '\n')
{
    cin >> a;
    // some pieces of code
}

Но возникла проблема: в то время как строчки по типу 1 2 3 этот код обрабатывает правильно, для такой же строчки, но с пробелом в конце, работа программы продолжается. Подскажите, пожалуйста, почему возникает такая проблема, и как её решать?

Answer 1

Получается так, потому что у вас остался пробел(ы) перед '\n' и соответственно cin.peek() смотрит на этот пробел и условие будет true, те будет ждать очередного числа.

Если нужно считать неопределённое количество чисел в строке, то можно считать эту строку и передать в std::stringstream и уже дальше читать из stringstream, пробелы в конце не помешают.

string s;
getline(cin, s);
stringstream inp(s);
int a;
while (inp >> a) {
    // some pieces of code
}
READ ALSO
CoInitializeEx и проблема с PeekMessage

CoInitializeEx и проблема с PeekMessage

В документации WinAPI к функции PeekMessageW сказано:

127
Защита Python-keras от просмотра исходников

Защита Python-keras от просмотра исходников

Всех приветствуюУ меня появился очень странный вопрос, но:

128
Обмен сигналами между потоками

Обмен сигналами между потоками

Запускаются два потокаПотокам на выполнение даётся одна и та же функция

123
Не могу очистить массив [закрыт]

Не могу очистить массив [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

119