HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.03.2023, 09:28
Ya Zaregalsya
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами: 4714653

Репутация: 98
По умолчанию

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

  #2  
Старый 06.03.2023, 11:39
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

это потому что ты смешал C с C++. SetLocale и sprintf это C. Соответственно настройки SetLocale влияют на sprintf. А stringstream это C++, там локаль задается через метод imbue
 
Ответить с цитированием

  #3  
Старый 28.03.2023, 22:03
Ya Zaregalsya
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами: 4714653

Репутация: 98
По умолчанию

Цитата:
Сообщение от SR_team  

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.