Преобразование аргумента командной строки в число с плавающей точкой
Мне нужно ввести аргумент командной строки-радиус шара(дробное число), почему когда я ввожу число с точкой, например 2.1, то оно преобразуется в целое 2, отбрасывая при этом дробную часть, а если ввожу число через запятую, то всё работает, и 2,1 преобразуется в число типа double? Что мне поменять, чтобы, записывая число 2.1, оно целиком преобразовывалось в тип double?
#include <iostream>
using namespace std;
float s(float);
float(*funcs_with_one_arg)(float) = s;
int main(int argc, char * argv[])
{
setlocale(LC_ALL, "Russian");
if (argc > 1) {
if (strcmp(argv[1], "s") == 0) cout << "Объём шара с радиусом " << argv[2] << " равен " << funcs_with_one_arg(atof(argv[2])) << endl;
}
return 0;
}
float s(float r) {
const float pi = 3.1415926535;
return (4 * pi*pow(r, 3)) / 3;
}
Результат программы:
C:\Users\user>"D:\programs\task\Debug\task.exe" s 2.1
Объём шара с радиусом 2.1 равен 33.5103
C:\Users\user>"D:\programs\task\Debug\task.exe" s 2,1
Объём шара с радиусом 2,1 равен 38.7924
В первом случае радиус воспринимается как 2, а не как 2.1, а во втором считает правильно