断言函数导致程序崩溃
Assert function causes program to crash
我使用了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;
}
断言不是您想要的。您需要的是验证。断言用于调试,用于识别完全无效的程序状态。用户输入的无效输入是而不是无效程序状态,它只是无效用户输入。
要执行验证,您需要if测试。您还需要一些准备好的代码来处理无效用户输入的情况。绝对没有办法阻止用户提供无效输入(除了疯狂的动态验证,即在键盘事件发生时捕捉键盘事件,并阻止这些击键转换为程序的字符输入,但现在我们变得越来越荒谬),所以当它发生时,你需要做出反应,比如,通过打印错误消息,然后要求更多的输入。
这样做的一种方法如下:
do {
cin >> num;
if (!(num >= 1 && num <= 7)) {
cerr << "invalid number; must be between 1 and 7!" << endl;
num = -1;
}
} while (num == -1);
为了扩展关于断言的这一点,应该使程序崩溃。断言失败意味着您的代码已损坏,必须先进行修复,然后才能在现实生活中使用。断言失败永远不应该在生产代码中触发;它们只是帮助测试和捕捉bug。
"崩溃"的作用是什么?根据我的说法,assert将中止程序执行,可能是0以外的另一个值。
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃