Проверка правильности ввода пользователем в C ++ - PullRequest
0 голосов
/ 01 марта 2020

У меня проблемы с упражнением 9 из главы 5 «Принципы и практика программирования Бьярна Страуструпа с использованием C ++».

Глава посвящена ошибкам, и в упражнении говорится: «Измените программу из упражнения 8, чтобы вывести ошибку, если результат не может быть представлен как int».

Я пытался использовать различные варианты

if (!cin)
error("Input is not an integer"); 

Однако проблема, с которой я столкнулся, заключается в том, что если я читаю что-то, не являющееся целым числом, оно либо отображает все ошибки, либо только Ошибка «Вы хотели сложить больше значений, чем вы ввели».

Это мой полный код из упражнения 8, прежде чем я попытался добавить ошибку ввода пользователя:

#include <iostream>
#include "../../std_lib_facilities.h"


int main()
{
    try {
        int size = 0;
        int numbers = 0;
        int sum = 0;
        vector<int>values;

        cout << "Please enter how many numbers you want to sum\n";
        cin >> size;

        if (size < 1)
            error("you have to enter at least one value!");


        cout << "enter some integers and then | to sum them\n";

        while (cin >> numbers)
            values.push_back(numbers);

         if (values.size() < size)
            error(" You wanted to sum more values than you entered. ");

        cout << "the sum of the first " << size << " numbers ( ";

        for (int i = 0; i < size; ++i) {
            sum += values[i];
            cout << values[i] << " ";
        }
        cout << ") is : " << sum << "\n";

        return 0;
    }
    catch (exception& e) {
        cerr << "Error: " << e.what() << "\n";
        keep_window_open();
        return 1;
    }
    catch (...) {
        cerr << "Oops: Unknown exception!\n";
        keep_window_open();
        return 2;
    }
}

1 Ответ

0 голосов
/ 01 марта 2020

Я думаю, что вы можете использовать cin.fail() метод для обнаружения неправильного ввода.

например

int numbers = 0;
cin >> numbers;
if (cin.fail())
{
   /* run when the input is not integer. */
}
...