как понять результат std::istringstream?

#c

#c

Вопрос:

 int x;
float f;
std::string s = "3.7";

std::istringstream is(s);
is >> x >> f;
  

почему результат ‘x’ и ‘f’ равен 3 и 0.7?
когда я использую

 is >> f;
  

результат ‘f’ равен 3.7.

Комментарии:

1. std::istringstream is(".7"); is>>f;

Ответ №1:

Istreamstream извлекает из потока столько символов, сколько >/» rel=»nofollow»>поместится в целевой тип данных (см. Арифметические типы). Другим условием остановки будет символ пробела.

Итак, если бы вы изменили свой код на следующий:

 int x;
char c;
int f;
std::string s = "3.7";

std::istringstream is(s);
is >> x;
is >> c;
is >> f;

std::cout << x << std::endl;
std::cout << c << std::endl;
std::cout << f << std::endl;
  

Это привело бы к следующему выводу:

 3
.
7
  

Комментарии:

1. Если мой ответ помог вам, было бы неплохо, чтобы вы отметили его как правильный ответ.