Как сделать, чтобы консоль принимала не только точку, но и запятую?

175
17 января 2019, 18:10

Решил изучать C++ и написал первый простенький калькулятор. Он то работает, но проблема вот в чем: когда ввожу первое десятичное число через запятую (например 14,34) то консоль выдает непонятные значения. А когда ввожу это же десятичное число через точку (например 14.34) , то все правильно считает. Подскажите в чем проблема, уже весь интернет перерыл, найти ничего не смог. Вот код:

#include <iostream>
using namespace std;
int main()
{
setlocale (LC_ALL, "Rus");
float a, b;
cout << "Введите первое число" << endl;
cin >> a;
cout << "Введите второе число" << endl;
cin >> b;
float c = a + b;
float d = a - b;
float f = a * b;
float g = a / b;
cout << "Сумма чисел:" << c << endl;
cout << "Разность чисел:" << d << endl;
cout << "Умножение чисел:" << f << endl;
cout << "Деление чисел:" << g << endl;
system("pause");
return 0;
}
Answer 1

Нужно как то заставить программу вводить то, что вам нужно. Это можно делать по разному. Вот один из вариантов:

float a;
float fraction = .0;
cin >> a;
if (cin.peek() == ',') { //если следующий символ запятая
    cin.ignore();        //пропускаем запятую
    cin >> fraction;     // вводим дробную часть        
}
while (int(fraction))  // пока дробная часть не меньше 1
    fraction /= 10;
a += fraction;
cout << a;

Поток ввода не должна понимать ваши намерения. Он работает так, как ему "велено "...

Answer 2

Да простят меня за это боги...

#include <algorithm>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
int main() {
    setlocale(LC_ALL, "Rus");
    std::string a_s, b_s;
    cout << "Введите первое число" << endl;
    cin >> a_s;
    cout << "Введите второе число" << endl;
    cin >> b_s;
    std::replace(a_s.begin(), a_s.end(), ',', '.');
    std::replace(a_s.begin(), a_s.end(), ',', '.');
    float a{std::stof(a_s.c_str())};
    float b{std::stof(a_s.c_str())};
    float c = a + b;
    float d = a - b;
    float f = a * b;
    float g = a / b;
    cout << "Сумма чисел:" << c << endl;
    cout << "Разность чисел:" << d << endl;
    cout << "Умножение чисел:" << f << endl;
    cout << "Деление чисел:" << g << endl;
    system("pause");
    return 0;
}
READ ALSO
QWheelEvent::angleDelta() возвращаемое значение

QWheelEvent::angleDelta() возвращаемое значение

В Qt 5 появилась функция:

150
EnumDesktopWindows не видит окно поиск Windows10

EnumDesktopWindows не видит окно поиск Windows10

В общем задача такая, что мне нужно проверить не перекрывает ли какое-нибудь окно моё приложениеДля этого я использую EnumDesktopWindows, в коллбеке...

165
Платформонезависимый Makefile

Платформонезависимый Makefile

Как можно определить в Makefile, под какую ОС компилируется программа? Желательно знать, хотя бы, в пределах IOS/Android/Windows/LinuxХотелось бы иметь общий...

148
Помощь с QThread [закрыт]

Помощь с QThread [закрыт]

Не уверен, что вопрос корректен по правилам форумаНо совсем в тупике

177