проверка успешности ввода - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в C++. У меня были некоторые знания о C, и я знаю, что не следует предполагать, что C правила такие же, как C++. Я просто ищу такое же решение.

например В C, когда мы используем:

int a;
if (scanf ("%d", &a) != 1);

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

, но в C++ я отладил этот код, когда дал ввод m для программирования:

    int a;
    cin >> a;

и он назначил * От 1018 * до a, но я сделал то же самое с scanf, и значение a было -858993460. (В то время как значение по умолчанию a в обоих языках было -858993460)

, поэтому вот моя проблема, как я могу узнать, если cin не удалось принять допустимый ввод? и обычно ли, 0 присваивается a в C++ коде? и если обычно, как я могу узнать, что введенные данные действительно 0 или были результатом сбоя? Есть ли способ проверить успешность cin?

PS: извините, если вопрос глупый. Я компетентно новичок в c++.

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете проверить это с помощью функции good (), например

#include <iostream>

using namespace std;

int main()
{
     int i=0;

     if( ! ( (cin>>i).good() ) )
        cout<<"Error";
     else
        cout<<i;

     return 0;
}

См. Ниже:

cin возвращает ссылку на него, а istream (cin является объектом istream) содержит Функция good () возвращает true, если поток находится в хорошем состоянии, в противном случае возвращает false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...