我使用了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;
}
答案 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以外的值。