unget потока istream возвращает только последнюю цифру числа

240
03 ноября 2017, 11:17
int main() {
vector<int> numbers;
vector<string> strings;
string temp;
int tempint;
setlocale(LC_ALL, "rus");
string str;
ifstream ifstr("text.txt");
while (ifstr >> temp) {
    if (isdigit(temp[0])) {
        ifstr.clear();
        ifstr.unget();
        ifstr >> tempint;
        numbers.push_back(tempint);
    }
    else {  
        strings.push_back(temp);
    }
}
ifstr.close();
for (int i : numbers) {
    cout << i << " ";
}
cout << endl;
for (string i : strings) {
    cout << i << " ";
}
cout << endl;
system("pause");
return 0;

}

Answer 1

Функция unget() возвращает только последний считанный символ.

Более того, стандарт гарантирует возврат только одного символа. Т.е. если вы вызовите unget() десять раз - нет никакой уверенности, что в поток будут возвращено более 1 символа.

Как сказано в "Стандартной библиотеку С++" Джосаттиса, "Стандарт гарантирует правильность работы только одного вызова между двумя операциями чтения".

READ ALSO
Поиск переменных в коде [требует правки]

Поиск переменных в коде [требует правки]

Как бы вы решили задачу дан файл (с кодом программы) по факту на любом языке

284
C++.Символы, сравнение символов

C++.Символы, сравнение символов

Суть программы в том, что для введеного символа надо вывести латинский или русский это символ, также учесть его регистрПодскажите как сделать...

307
Асинхронный ввод и вывод данных

Асинхронный ввод и вывод данных

Есть сервер на Qt/c++, он слушает определенный порт и принимает с него данныеКогда к нему поступают какие-нибудь данные, они выводятся на консоль

301
В чем заключается ошибка в функции?

В чем заключается ошибка в функции?

В функции matrix_sum видает ошибку , подскажите что я не так написал?

435