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

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

25.05.2017, 20:11. Показов 20891. Ответов 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
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 20:21
C++
1
setlocale(LC_ALL, "RUS");
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
25.05.2017, 20:42
watersoda,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>     // std::cin , std::cout, std::endl
#include <sstream>      // std::stringstream
#include <string>       // std::string
#include <cstdlib>      // system("pause");
void f(std::string&, double&);
int main(void)
{
    std::string snum; double a;
    std::cout << "Enter the double: "; std::cin >> snum;
    f(snum, a);
    std::cout << a + 0.33f << std::endl;
    system("pause"); return 0;
}
 
// snum - принимает строку по ссылке
// num - принимает double по ссылке, куда будет записан результат
void f(std::string &snum, double &num) {
    std::stringstream sstr;
    for (auto const& val : snum)
        sstr << (val == ',' ? '.' : val);
    sstr >> num;
}
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 20:58  [ТС]
nd2, не работает.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 21:00
Цитата Сообщение от watersoda Посмотреть сообщение
nd2, не работает.
Скрин ввода покажи.
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
25.05.2017, 21:01
watersoda, немного улучшил, теперь если будет не цифра или ',' то число будет равно 0
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
#include <iostream>     // std::cin , std::cout, std::endl
#include <sstream>      // std::stringstream
#include <string>       // std::string
#include <cstdlib>      // system("pause");
int f(std::string&, double&);
int main(void)
{
    std::string snum; double a;
    std::cout << "Enter the double: "; std::cin >> snum;
    f(snum, a);
    std::cout << a << std::endl;
    system("pause"); return 0;
}
 
int f(std::string &snum, double &num) {
    std::stringstream sstr;
    for (auto const& val : snum) {
        if (val >= '0' && val <= '9' || val == ',')
            sstr << (val == ',' ? '.' : val);
        else { num = 0; return 0;}
    }
    sstr >> num;
    return 1;
}
Цитата Сообщение от watersoda Посмотреть сообщение
не работает.
Для setlocale(LC_ALL, "RUS"); используй С-ишную библиотеку #include <clocale>
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 21:19  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Скрин ввода покажи.
Только кодировка поломалась:
Миниатюры
Запятая как разделитель дробной части вместо точки  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 21:23
Цитата Сообщение от watersoda Посмотреть сообщение
Только кодировка поломалась:
Это когда это делаешь?
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
setlocale(LC_ALL, "RUS");
Среда какая?

Добавлено через 1 минуту
Для ввода обычную клавиатуру используешь или цифровую?
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 21:25  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Это когда это делаешь?
Да.
Цитата Сообщение от nd2 Посмотреть сообщение
Среда какая?
Dev-C++ 5.11.

Добавлено через 39 секунд
Клавиатура обычная.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 21:28
Так попробуй:
C++
1
setlocale(LC_NUMERIC, "RUS");
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 21:31
Цитата Сообщение от watersoda Посмотреть сообщение
Да.
Цитата Сообщение от watersoda Посмотреть сообщение
Dev-C++ 5.11.
У тебя значит mingw, а там с локалями проблемы. Если у тебя нормально выводилась кириллица, то у тебя какие-то дополнительные настройки для русификации сделаны. Обычно для mingw только с этим работает вывод кириллицы (шрифт для консоли Lucida Console):
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 21:34  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Так попробуй:
Кодировка выправилась, но с запятой по-прежнему облом.
Миниатюры
Запятая как разделитель дробной части вместо точки  
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 21:36  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
У тебя значит mingw, а там с локалями проблемы. Если у тебя нормально выводилась кириллица, то у тебя какие-то дополнительные настройки для русификации сделаны. Обычно для mingw только с этим работает вывод кириллицы (шрифт для консоли Lucida Console):
Ну почему же? В параметрах компилятора прописывается: -finput-charset=CP1251 -fexec-charset=CP866
И кириллица отображается корректно.
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
25.05.2017, 21:38
watersoda, я же выше написал функцию f и пример привел как она работает.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 21:39
Цитата Сообщение от watersoda Посмотреть сообщение
Ну почему же?
Что "почему же"? Я и говорил, что какие-то дополнительные настройки сделаны:
Цитата Сообщение от watersoda Посмотреть сообщение
В параметрах компилятора прописывается: -finput-charset=CP1251 -fexec-charset=CP866
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 21:42
А у тебя в настройках Windows локализация русская выбрана? В Excel запятая?
Вот это можешь попробовать: Прочитать из файла число с запятой
1
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
25.05.2017, 21:44
nmcf, он хочет чтобы в CMD писал не точку, а запятую и типа считало это, как дробное число.
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
25.05.2017, 21:46  [ТС]
Цитата Сообщение от anapshy Посмотреть сообщение
nmcf, он хочет чтобы в CMD писал не точку, а запятую и типа считало это, как дробное число.
Совершенно верно.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 21:47
anapshy, я понял. Об этом и речь. Может, у него в региональных настройках разделитель - точка. Тогда setlocale() и не работает. А в том примере показано, как задать запятую принудительно.
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
25.05.2017, 21:51
НА ВСЁ ГОТОВОЕ
Локализацию сам подключишь какую надо
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
#include <iostream>     // std::cin , std::cout, std::endl
#include <sstream>      // std::stringstream
#include <string>       // std::string
#include <cstdlib>      // system("pause");
int f(std::string&, double&);
int main(void)
{
    std::string snum;
    double a, b, c;
    system("cls");
    std::cout << "Введите первое число: "; std::cin >> snum; f(snum, a);
    std::cout << "Введите второе число: "; std::cin >> snum; f(snum, b);
    c = a + b;
    std::cout << "Сумма чисел равна: " << c << std::endl << std::endl;
    system("pause"); return 0;
}
 
int f(std::string &snum, double &num) {
    std::stringstream sstr;
    for (auto const& val : snum) {
        if (val >= '0' && val <= '9' || val == ',')
            sstr << (val == ',' ? '.' : val);
        else { num = 0; return 1;}
    }
    sstr >> num;
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2017, 21:51
Помогаю со студенческими работами здесь

Как в 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 у меня равняется дробное число с запятой, можно ли сделать так, чтобы при нахождении дробное число...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru