Как конвертировать пользовательский ввод char в Double C++
Я пытаюсь выяснить способ взятия символа пользовательского ввода и преобразования его в double. Я попробовал atof
функция, хотя кажется, что может использоваться только с постоянными символами. Есть ли способ сделать это вообще? Вот идея того, что я хотел бы сделать:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
int main(){
char input;
double result;
cin >> input;
result = atof(input);
}
3 ответа
atof
преобразует строку(не один символ) в удвоение Если вы хотите преобразовать один символ, есть несколько способов:
- Создайте строку, добавив нулевой символ, и преобразуйте ее в двойной
- Вычтите 48(значение ASCII '0') из символа
- использование
switch
чтобы проверить, какой это персонаж
Обратите внимание, что стандарт C не гарантирует, что коды символов находятся в ASCII, поэтому второй метод является непереносимым, поскольку он работает на большинстве машин.
Вот способ сделать это, используя строковые потоки (кстати, вы, вероятно, хотите преобразовать std::string
к double
ни одного char
, поскольку вы теряете точность в последнем случае):
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::string str;
std::stringstream ss;
std::getline(std::cin, str); // read the string
ss << str; // send it to the string stream
double x;
if(ss >> x) // send it to a double, test for correctness
{
std::cout << "success, " << " x = " << x << std::endl;
}
else
{
std::cout << "error converting " << str << std::endl;
}
}
Или, если ваш компилятор совместим с C++11, вы можете использовать функцию std::stod, которая преобразует std::string
в double
, лайк
double x = std::stod(str);
Последний делает в основном то, что делает первый фрагмент кода, но он выдает std::invalid_argument
Исключение в случае, если не удается преобразование.