Попытка преобразовать строку в удвоение в условиях

У меня есть функция, которая использует параметр строки std, чтобы проверить, есть ли альфа-символ. Было бы лучше проверить только числовые символы, но я пока не дошел до этого. Я просто пытаюсь заставить его распознавать, если на входе нет номера. Если нет, он выводит сообщение об ошибке до тех пор, пока не появятся только цифры. После этого я пытаюсь преобразовать строку в удвоение с помощью atof(), чтобы она могла быть возвращена в main(). Я получил отладочное утверждение не удалось! Сообщение во время выполнения, в котором говорится, что строка выражения находится вне диапазона, если в число введено число. В противном случае, если буква имеет ввод, она продолжает зацикливаться с сообщением об ошибке. Я получил свой код для функции ниже. У любого есть какие-нибудь подсказки относительно того, что я делаю неправильно? У меня нет идей...

double Bet::betProb(std::string b)
{
    bool alphChar = false;
    double doubleBet;
    for(int i = 0; i < b.size(); i++){
        if(isalpha(b[i])){
            alphChar = true;
        }
    }
    while(alphChar){
        cout << "Error! Bet only with numbers." << endl;
        cin >> b;
        for(int i = 0; i < b.size(); i++){

            if(!isalpha(b[i])){
                alphChar = false;
            }
        }
    }

    string F=b;
    int T=F.size();
    char Change[100];
    for (int a=0;a<=T;a++)
    {
        Change[a]=F[a];
    }

    doubleBet = atof(Change);

    return doubleBet;
}

1 ответ

Поскольку ваша проблема уже решена, я подумал, что покажу вам, как это можно сделать, используя стандартную функциональность C++:

#include <string>
#include <stdexcept>

double Bet::betProb(const std::string& str)
{
    double d;

    try {
        d = std::stod(str);
    } catch (const std::invalid_argument&) {
        std::cerr << "Argument is invalid\n";
        throw;
    } catch (const std::out_of_range&) {
        std::cerr << "Argument is out of range for a double\n";
        throw;
    }
    return d;
}
Другие вопросы по тегам