1

まだまだ初心者なので素人のミスはご容赦ください。私のクラスでは、double 入力を文字列に変換して、プロジェクトの別の部分で使用する必要があります。整数の検証は問題なく機能し、この前の質問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

手動で行うことに本当に熱心な場合は、次の方法を見てください。

文字列から浮動小数点数を手動で解析する方法

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

理解した。

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 の整数で、ドットをカウントして 1 つだけが入力されたことを確認します。

于 2015-09-29T15:56:14.947 に答える
0

文字列のインデックスとして double を使用するのはなぜですか? ++また、 for increment a double の使用はスキップします。

于 2015-09-28T07:51:11.460 に答える