Я не могу заставить функцию 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();
}
Тебе нужно
atof(input.c_str());
Это будет «подходящая функция преобразования» в вопросе.
std::string::c_str
Документация:
const char * c_str () const;
Получить строковый эквивалент C
Возвращает указатель на массив, который содержит завершенную нулем последовательность символов (то есть C-строку), представляющую текущее значение строкового объекта.
Вы также можете использовать strtod
функция для преобразования строки в двойное:
std::string param; // gets a value from somewhere
double num = strtod(param.c_str(), NULL);
Вы можете посмотреть документацию для strtod
(например. man strtod
если вы используете Linux / Unix), чтобы увидеть более подробную информацию об этой функции.