Setlocale и запись дробных чисел через sprintf.

Ya Zaregalsya

Известный
Автор темы
386
134
У меня как и у многих вначале проекта прописано setlocale(LC_ALL, "Russian"), чтобы можно было нормально работать с кириллицей. Сегодня столкнулся с такой проблемой, что со сменой локализации sprintf начинает записывать дробные числа с запятой вместо точки, а функция stringstream при этом читает по американскому стандарту с разделителем в виде точки, в результате при чтении из файла данные ломаются, программа воспринимает дробное число как два числа, разделённых запятой. Вопрос такой, как настроить sprintf на запись через точку, либо stringstream на чтение через запятую?
 
Последнее редактирование:

Ya Zaregalsya

Известный
Автор темы
386
134
это потому что ты смешал C с C++. SetLocale и sprintf это C. Соответственно настройки SetLocale влияют на sprintf. А stringstream это C++, там локаль задается через метод imbue
Точно. Оказалось, что в данном случае вообще не нужен принтф и можно записывать данные тем же стрингстримом, не смешивая разные либы.