断言功能导致程序崩溃

时间:2015-02-19 05:10:37

标签: c++

我使用了assert函数来确保第一个数字输入在1到7之间(包括1和7)。但是,当我执行程序并输入无效数字时,会导致程序崩溃。那么,如果是这种情况,断言函数如何在这里有用呢?

请在必要时更正我的实施。

代码:

#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;
}

2 个答案:

答案 0 :(得分:1)

断言不是你想要的。您需要的是验证。断言用于调试,用于识别完全无效的程序状态。输入无效输入的用户无效的程序状态,只是无效的用户输入

要执行验证,您需要进行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);

为了扩展关于断言的这一点,他们假设使程序崩溃。断言失败意味着您的代码被破坏,必须先修复才能在现实生活中使用。绝不应该在生产代码中触发断言失败;他们只是帮助测试和捕获错误。

答案 1 :(得分:0)

“崩溃”有什么作用?据我说,断言中止程序执行,可能是另一个0以外的值。