C ++ преобразование строки в двойное использование atof

Я не могу заставить функцию atof () работать. Я только хочу, чтобы пользователь вводил значения (в виде десятичных чисел), пока они не введут ‘|’ и это затем разорвать петлю. Я хочу, чтобы значения первоначально считывались как строки, а затем преобразовывались в удвоения, потому что я обнаружил в прошлом, когда использовал этот метод ввода, если вы вводите число «124», оно выходит из цикла, потому что «124» является код для «|» голец.

Я осмотрелся и узнал о функции atof (), которая, по-видимому, преобразует строки в double, однако, когда я пытаюсь выполнить преобразование, я получаю сообщение «не существует подходящей функции преобразования из std :: string в const char». И я не могу понять, почему это так.

void distance_vector(){

double total = 0.0;
double mean = 0.0;
string input = " ";
double conversion = 0.0;
vector <double> a;

while (cin >> input && input.compare("|") != 0 ){
conversion = atof(input);
a.push_back(conversion);
}

keep_window_open();
}

1

Решение

Тебе нужно

atof(input.c_str());

Это будет «подходящая функция преобразования» в вопросе.

std::string::c_str Документация:

const char * c_str () const;
Получить строковый эквивалент C
Возвращает указатель на массив, который содержит завершенную нулем последовательность символов (то есть C-строку), представляющую текущее значение строкового объекта.

4

Другие решения

Вы также можете использовать strtod функция для преобразования строки в двойное:

std::string param;  // gets a value from somewhere
double num = strtod(param.c_str(), NULL);

Вы можете посмотреть документацию для strtod (например. man strtod если вы используете Linux / Unix), чтобы увидеть более подробную информацию об этой функции.

3

По вопросам рекламы [email protected]