1

请原谅任何业余错误,我对此还是很陌生。对于我的课程,我们需要将双输入转换为字符串以用于项目的不同部分。整数的验证工作得很好,我尝试使用上一个问题Validating a double in c++ 中的一些代码 ,但令我懊恼的是它没有工作。

这是我的代码:

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);

谢谢。

编辑:我刚刚发现这个How do i verify a string is valid double (即使它有一个点)?我可以肯定地说我不知道​​发生了什么。

4

3 回答 3

0

弄清楚了。

只需要在 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 的整数,用于计算点数并确保只输入一个。

于 2015-09-29T15:56:14.947 回答
0

如果您真的热衷于手动操作,请查看以下方法:

如何从字符串中手动解析浮点数

https://www.daniweb.com/programming/software-development/code/217315/c-function-stod-string-to-double-convert-a-string-to-a-double

并阅读评论。这不是很简单,但它应该可以工作。或者更好的是,从 C++ 检查 stod 的代码。

于 2015-09-28T07:17:08.077 回答
0

为什么要使用双精度作为字符串的索引?另外,我会跳过使用 a ++for increment a double 。

于 2015-09-28T07:51:11.460 回答