2015-02-19 3 views
1

Я использовал функцию assert, чтобы гарантировать, что первый ввод номера находится между 1 и 7 (включительно). Однако, когда я запускаю программу и вводя недопустимое число, это приводит к сбою программы. Итак, как здесь действует функция assert, если это так?Функция Assert приводит к сбою программы

Пожалуйста, исправьте мою реализацию там, где это необходимо.

Код:

#include <iostream> 
#include <assert.h> 

using namespace std; 

int main() { 
    int num; 
    int n; 
    int max; 
    cout << "Please enter a number between 1 & 7 \n"; 
    cin >> num; 
    assert(num >= 1 && num <= 7); 
    for (int i = 0; i < num; i++) { 
     cout << "Please enter number " << (i + 1) << ": "; 
     cin >> n; 
     if (i == 0) { 
      max = n; 
     } 
     max = (n > max) ? n : max; 
    } 
    cout << "The maxmum value is: " << max << endl; 
    system("pause"); 
    return 0; 
} 

ответ

1

Утверждай не то, что вы хотите здесь. Что вам нужно, это validation. Утверждения предназначены для отладки, для идентификации полностью недействительных программных состояний. Пользователь, вводящий недопустимый ввод, не недействительный статус программы, это всего лишь неверный ввод пользователя.

Для выполнения проверки необходимо выполнить if-test. Вам также понадобится некоторый код, готовый обработать случай неправильного ввода пользователя. Существует абсолютно никакой возможности предотвратить использование пользователем недопустимого ввода (за исключением безумно агрессивной динамической проверки, когда вы фиксируете события клавиатуры по мере их возникновения и не позволяете этим нажатиям клавиш переходить на ввод символов в вашу программу, но теперь мы просто смеемся), поэтому вам нужно отреагировать на это, когда это произойдет, скажем, путем печати сообщения об ошибке, а затем запросить больше ввода.

Один из способов сделать это заключается в следующем:

do { 
    cin >> num; 
    if (!(num >= 1 && num <= 7)) { 
     cerr << "invalid number; must be between 1 and 7!" << endl; 
     num = -1; 
    } 
} while (num == -1); 

Просто расширить на тот момент около утверждений, они предполагается сделать сбой программы. Ошибка утверждения означает, что ваш код сломан и должен быть исправлен, прежде чем его можно будет использовать в реальной жизни. Ошибки утверждения не должны запускаться в производственном коде; они просто помогают тестировать и ловить ошибки.

0

Что делает «авария»? По мне, утверждают, будет прекратить выполнение программы, возможно, как другое значение, отличное от 0.

Смежные вопросы