Как проверить пользовательский ввод в C ++ - PullRequest
4 голосов
/ 29 сентября 2019

В следующем коде я пытался создать функцию в public пространстве класса "SOMECLASS", которая принимала бы пользовательский ввод, состоящий из значений с плавающей запятой (объявленных в private пространство того же класса) и проверить ввод пользователя. Если введенное значение не является значением с плавающей запятой, на нем отобразится сообщение об ошибке, и пользователю будет предоставлена ​​возможность повторно ввести это значение. Тем не менее, после ввода некоторого мусора цикл запускается с самого начала, заставляя пользователя снова вводить все эти значения.

PS: я знаю, что можно создать несколько циклов, чтобы проверить каждое значение отдельно и разорвать циклесли утверждение верно, но я хочу знать, есть ли более простые способы сделать это.

Заранее благодарен за помощь.

void SOMECLASS::USER_INPUT() {
    bool loopBool = true; // it is used to manage the do/while loop below;

    do { // the loop is going to run for as long as the boolean is true;

        cout << "   Enter the frequency of the cumputer's CPU in GHz: ";
        cin >> float1;

        if (!float1) { // checks if the value entered is valid;
            cin.clear();
            cin.ignore (numeric_limits<streamsize>::max(), '\n');
            cout << "INVALID INPUT!!!" << endl << endl;
        }

        else {
            cout << "   Enter the Hard Drive Capacity in TB: ";
            cin >> float2;

            if (!float2) { // checks if the value entered is valid;
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                cout << "INVALID INPUT" << endl << endl;
            }

            else {
                cout << "   Enter the capacity of your RAM in GB: ";
                cin >> float3;

                if (!float3) { // checks if the value entered is valid;
                    cin.clear();
                    cin.ignore(numeric_limits<streamsize>::max(), '\n');
                    cout << "INVALID INPUT" << endl << endl;
                }
                loopBool = false;
            }
        }
    } while (loopBool);
};

ВЫХОД:

Computer #1/2
 |--> Enter the frequency of the cumputer's CPU in GHz: 2.3
 |--> Enter the Hard Drive Capacity in TB: 4
 |--> Enter the capacity of your RAM in GB: asd
INVALID INPUT

 `--> The final cost is: ...

желаемый выход:

Computer #1/2
 |--> Enter the frequency of the cumputer's CPU in GHz: 2.3
 |--> Enter the Hard Drive Capacity in TB: 4
 |--> Enter the capacity of your RAM in GB: asd
 INVALID INPUT
 |--> Enter the capacity of your RAM in GB: 16
 `--> The final cost is: ...

1 Ответ

0 голосов
/ 29 сентября 2019

Если число должно быть числом с плавающей запятой (десятичными), тогда вы можете сделать следующее: - Ceil (число) <> floor (число)

Если это целочисленное значение, то floor и ceil будут равны.

...