Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/103: Рейтинг темы: голосов - 103, средняя оценка - 4.52
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174

Запятая как разделитель дробной части вместо точки

25.05.2017, 20:11. Показов 21308. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется программа сложения двух чисел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
double a, b, c;
system("cls");
cout << "Введите первое число: ";
cin >> a;
cout << "Введите второе число: ";
cin >> b;
c = a + b;
cout << "Сумма чисел равна: ";
cout << c << endl << endl;
system("pause");
return 0;
}
Если вводить целые числа или дробные, в которых целая часть отделена точкой, то сложение выполняется корректно. Если же вместо точки задействовать запятую, например, 0,2, то результат работы программы будет иметь следующий вид:
Введите первое число: 0,2
Введите второе число: Сумма чисел равна: 0

Для продолжения нажмите любую клавишу . . .
Есть ли в C++ возможность использовать запятую вместо точки без ущерба корректной работе программы?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2017, 20:11
Ответы с готовыми решениями:

Разделитель целой и дробной части
Как получить текущий разделитель целой и дробной части ? visual studio 2013.

Разделитель целой и дробной части - точка и запятая одновременно
Есть форма с очень большим количеством Edit'ов, предназначенных для ввода чисел с точкой. Есть кнопка типа &quot;Ввод данных&quot;, по...

Как из макроса в Eхcel поменять разделитель целой и дробной части с ',' на '.' ?
Kak is Makrosa v EXcele pomenjat' rasdelitel' celoj i drobnoj 4asti s ',' na '.'?

34
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 21:53  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nmcf Посмотреть сообщение
anapshy, я понял. Об этом и речь. Может, у него в региональных настройках разделитель - точка. Тогда setlocale() и не работает. А в том примере показано, как задать запятую принудительно.
У меня разделитель — запятая.
Миниатюры
Запятая как разделитель дробной части вместо точки  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 21:56
Тогда делай, как в примере. Только вместо ifstream - cin.
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 22:09  [ТС]
Цитата Сообщение от anapshy Посмотреть сообщение
НА ВСЁ ГОТОВОЕ
Ругается на строку 20:
In function 'int f(std::string&, double&)':
[Error] range-based 'for' loops are not allowed in C++98 mode
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 22:12
Компилятор у тебя древний. Я же предложил короткий вариант.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
25.05.2017, 22:46
Цитата Сообщение от nmcf Посмотреть сообщение
Компилятор у тебя древний.
Может поддержка С++11 не включена.
0
 Аватар для anapshy
533 / 274 / 220
Регистрация: 14.11.2016
Сообщений: 1,054
25.05.2017, 23:52
Цитата Сообщение от watersoda Посмотреть сообщение
Ругается на строку 20
C++11 юзай
0
 Аватар для keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 151
Записей в блоге: 2
26.05.2017, 01:34
#include <windows.h>
char buf[5];
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE _SDECIMAL,buf,sizeof(buf)/sizeof(buf[0] )); //получаем десятичный разделитель установленный в системе
cout<<"buf = "<<buf<<endl; //переменная buf содержит его-это точка или запятая у кого как.

далее при получении данных от пользователя проверяем что он ввел и либо меняем все точки и запятые на buf, либо не даем вводить не то что нужно.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
26.05.2017, 01:50
Не работает.
Миниатюры
Запятая как разделитель дробной части вместо точки  
0
 Аватар для keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 151
Записей в блоге: 2
26.05.2017, 01:55
Посмотрел у меня windows10 предлагает 4 варианта разделителя

Панель управления\Часы, язык и регион->Региональные стандарты->Дополнительные параметры->Разделитель целой и дробной части

На выбор: точка, пробел и два вида запятых
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
26.05.2017, 01:56
Цитата Сообщение от keltor Посмотреть сообщение
Посмотрел у меня windows10 предлагает 4 варианта разделителя
И...?
0
 Аватар для keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 151
Записей в блоге: 2
26.05.2017, 01:59
Цитата Сообщение от nd2 Посмотреть сообщение
Не работает.
Что не работает?

Цитата Сообщение от keltor Посмотреть сообщение
далее при получении данных от пользователя проверяем что он ввел и либо меняем все точки и запятые на buf, либо не даем вводить не то что нужно.
Там далее море вариантов, реализовывайте как хотите.

Добавлено через 1 минуту
Цитата Сообщение от nd2 Посмотреть сообщение
И...?
Самое простое поставь обработку на кнопки и меняй все запятые и точки на buf
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
26.05.2017, 02:36
Цитата Сообщение от keltor Посмотреть сообщение
Что не работает?
На скрин смотри. Запятая установлена в системе как разделитель, но ввод с запятой не работает.

Добавлено через 16 минут
У меня, в студии, с запятой, так заработало:
C++
1
cin.imbue(locale(""));
Добавлено через 13 минут
В mingw так не работает, работает только это:
Прочитать из файла число с запятой
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
26.05.2017, 08:30
Лучший ответ Сообщение было отмечено watersoda как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream.h>
 
double f()
 {
   char s[21]="\0";
   double b;
   int i=0;
 
   cin.getline(s,21);
   while((s[i])!='\0')
     {
     if(s[i]==',')
      s[i]='.';
      i++;
     }
     b=atof(s);
   return b;
     }
int main()
{
 
 double a,b,c;
    a=f();
    b=f();
    c=a+b;
  cout<<c;
 
    system("pause>NULL");
    return 0;
}
1
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
27.05.2017, 11:13  [ТС]
Цитата Сообщение от повар1 Посмотреть сообщение
C++
Ругается на строку 16:
In function 'double f()':
[Error] 'atof' was not declared in this scope
Добавлено через 12 минут
А нет, с подключением поддержки C++11 нормально скомпилировалось и заработало. Спасибо!
0
 Аватар для anapshy
533 / 274 / 220
Регистрация: 14.11.2016
Сообщений: 1,054
27.05.2017, 12:18
Цитата Сообщение от watersoda Посмотреть сообщение
Ругается на строку 16
Си-шная функция. Требует библиотеки cstdlib / stdlib.h
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2017, 12:18
Помогаю со студенческими работами здесь

Как в Excel 2000 определить - какой разделитель целой/дробной части ?
Вопрос, собстно, в subj. Для Экселя 2002 есть Application.DecimalSeparator, это я нашел. А вот в более ранних версиях -- как узнать, что на...

Разделитель дробной части
Добрый день, есть такая проблема: По умолчанию стоит разделитель дробной части &quot;,&quot; необходимо при вводе числа менять его на...

XMLSerializer и запятая-отделитель дробной части
Добрый день. Слизал из интернета небольшой код для клонирования объектов: public static class Cloner { public...

Разделитель целой и дробной части
Имеется: Console.Write(&quot;A B N = &quot;); Double w; Double istr; w = Console.ReadLine().Split(new char { ' ', '\t', ';' }, ...

Поменять разделитель дробной части числа
Привет всем, при нахождении sin у меня равняется дробное число с запятой, можно ли сделать так, чтобы при нахождении дробное число...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru