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

У меня есть функция, которая использует параметр строки 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;
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]