Пожалуйста, извините за любые любительские ошибки, я все еще новичок в этом. Для моего класса нам нужно преобразовать двойной ввод в строку для использования в другой части проекта. Проверка целых чисел работала очень хорошо, и я попытался использовать часть кода из этого предыдущего вопроса Проверка двойного в с ++
хотя, к моему большому огорчению, это не сработало.
Вот мой код:
string input;
bool valid;
double num;
//Verification of valid inputs
do
{
valid = true;
cout << "What is the " << name << " rate of the population? (% per year): ";
getline(cin, input);
num = input.length();
if (num == 0)
{
cout << "\nNo data was entered, please enter a number.\n";
valid = false;
}
else
{
for (double i = 0; i < num; i++)
{
if (input.at(i) < '0' || input.at(i) > '9')
{
cout << "\nPlease enter a valid, positive number.\n";
valid = false;
break;
}
}
}
} while (valid == false);
return stod(input);
Благодарю.
Редактировать:
Я только что нашел это Как проверить, что строка является допустимой двойной (даже если в ней есть точка)? и я могу с уверенностью сказать, что понятия не имею, что происходит.
Если вы действительно хотите сделать это вручную, взгляните на следующие методы:
Как вручную разобрать число с плавающей запятой из строки
и читать комментарии. Это не совсем просто, но это должно сработать. Или, что еще лучше, проверьте код stod из C ++.
Почему вы используете double в качестве индекса для строки? Кроме того, я бы пропустил, используя ++
для увеличения в два раза.
Догадаться.
Просто нужно было что-то добавить в оператор if.
if ((input.at(i) < '0' || input.at(i) > '9') && input.at(i) != '.')
{
cout << "\nError! illegal character was entered.\n";
valid = false;
break; // 12w345
if (input.at(i) == '.')
ct++;
if (ct > 1)
{
cout << "Error! Only one dot allowed.";
valid = false;
С ct является целым числом со значением 0, чтобы подсчитать точки и убедиться, что была введена только одна.