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

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

25.05.2017, 20:11. Показов 21475. Ответов 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,430
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,430
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,430
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,430
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
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru