C++ 断言函数导致程序崩溃

C++ 断言函数导致程序崩溃,c++,C++,我使用了assert函数来确保输入的第一个数字介于1和7之间(包括1和7)。但是,当我执行程序并输入一个无效的数字时,它会导致程序崩溃。那么,如果是这样的话,assert函数在这里有什么用处呢 请在需要时更正我的实现 代码: #包括 #包括 使用名称空间std; int main(){ int-num; int n; int max; cout>num; assert(num>=1&&numassert不是您想要的。您需要的是验证。assert用于调试,用于识别完全无效的程序状态。输入无效输入的

我使用了assert函数来确保输入的第一个数字介于1和7之间(包括1和7)。但是,当我执行程序并输入一个无效的数字时,它会导致程序崩溃。那么,如果是这样的话,assert函数在这里有什么用处呢

请在需要时更正我的实现

代码:

#包括
#包括
使用名称空间std;
int main(){
int-num;
int n;
int max;
cout>num;

assert(num>=1&&numassert不是您想要的。您需要的是验证。assert用于调试,用于识别完全无效的程序状态。输入无效输入的用户不是无效的程序状态,它只是无效的用户输入

要执行验证,您需要一个if测试。您还需要一些代码来处理无效用户输入的情况。绝对没有办法阻止用户提供无效输入(除了疯狂激进的动态验证,您可以在键盘事件发生时捕获它们,并防止这些击键转换为程序的字符输入,但现在我们只是变得可笑了),因此您需要在发生时做出反应,例如,打印错误消息,然后请求更多输入

一种方法如下:

do {
    cin >> num;
    if (!(num >= 1 && num <= 7)) {
        cerr << "invalid number; must be between 1 and 7!" << endl;
        num = -1;
    }
} while (num == -1);
do{
cin>>num;
如果(!(num>=1&&num“崩溃”有什么作用?根据我的说法,assert将中止程序执行,可能是作为0以外的另一个值

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