Как конвертировать пользовательский ввод 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 Исключение в случае, если не удается преобразование.

Замещать

char input

с

char *input
Другие вопросы по тегам