У меня вопрос о поведении потока, см. Следующий пример. Я ожидал, что ss_char и ss_int будут иметь состояние eof, но только ss_int будет иметь состояние eof.неожиданное поведение при чтении символа из istringstream
Мой вопрос: почему это не ss_char eof state? Не могу ли я использовать оператор >>, только функцию istringstream :: get(), но зачем тогда читать значение успешно?
Выход:
значение символ: а
INT значение: 42
ss_char ВФ: ложь // почему ложь?
ss_int eof: true
Извините за мой плохой английский. Я работаю над улучшением своего английского языка.
#include <iostream>
#include <sstream>
int main(int /*argc*/, char const * /*argv*/[])
{
char c;
int num;
std::istringstream ss_int("42");
std::istringstream ss_char("a");
if (ss_char >> c)
{
std::cout << "char value: " << c << std::endl;
}
else
{
std::cout << "cannot read char" << std::endl;
}
if (ss_int >> num)
{
std::cout << "int value: " << num << std::endl;
}
else
{
std::cout << "cannot read int" << std::endl;
}
std::cout << std::endl;
std::cout << "ss_char eof: " << std::boolalpha << ss_char.eof() << std::endl; // why false
std::cout << "ss_int eof: " << std::boolalpha << ss_int.eof() << std::endl;
return 0;
}
Разница заключается в том, что 'ss_char' нужно только извлечь один символ, в то время как' ss_int' продолжит сканирование, пока не найдет пробел или конец файла. – 0x499602D2