2015-03-29 3 views
0

Я пытаюсь преобразовать строку в double изнутри функции, а затем вернуть логическое значение, которое будет изменяться на основе того, было ли преобразование успешным или нет. МОЙ ВОПРОС - как я могу проверить, не изменилось ли преобразование?Преобразование строки в двойную функцию

//function definitions 
bool isValidDouble(string inputString); 

bool isValidDouble(string inputString) 
{ 
    //Declarations 
    bool validDouble = true; 
    double convertedDouble = 0; 

    convertedDouble = atof(inputString.c_str()); 


//  validDouble = false; 
//  convertedDouble = 0; 

    return validDouble; 
} 

// CODE FROM MAIN 

int main() 
{ 
    string userInput = ""; 
    cout << "Please Enter a number to convert. "; 
    cin >> userInput; 
    isValidDouble(userInput); 
    return 0; 
} 
+1

С 'atof', вы не можете. Если преобразование завершается неудачно, оно просто возвращает '0.0', что, очевидно, остается действительным числом. – aruisdante

+0

Любые предложения по другому способу покрытия, которые могут потерпеть неудачу и позволят мне проверить? – Ryan

+1

use strtod() - позволяет проверить успешность преобразования. – Shaggi

ответ

0

atof не обеспечивает надлежащие механизмы проверки ошибок, возвращая 0.0 при возникновении ошибки, но никоим образом не различать правильный 0.0 и неправильный 0.0.

По этой причине <cstdlib> также включает в себя функцию std::strtod, которая принимает дополнительный аргумент типа char**, который настраивается в зависимости от того, насколько удален анализ.

Пример:

ret = std::strtod(str, &ptr); 
if (ret == 0 && ptr == str) 
    /* conversion failed */ 
else if (ret == HUGE_VAL) 
    /* out of range */ 
else 
    /* success */ 
+0

Это может быть или не иметь значения для OP, но ваше использование 'strtod' не проверяет, что все символы (или даже все небелые символы) на входе были действительными частями номера, так что, например, вы указали код '1.2O3' (это« о », а не« ноль ») даст« 1,2 »и успех. –

2

Если C++ 11 доступен, вы можете использовать std::stod(). Он генерирует исключение, если преобразование невозможно.

Смежные вопросы