无法运行
#include <stdio.h >
#include<stdlib.h>
#define _CRT_SECURE_NO_
int main()
{
long i;
double bonus, bon1, bon2, bon4, bon6, bon10;
int c;
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 200000 * 0.05;
bon6 = bon4 + 200000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf("请输入利润i:");
scanf_s("%ld", i);
c = i / 100000;
if (c > 10) c = 10;
switch (c)
{
case 0: bonus = i * 0.1; break;
case 1: bonus = bon1 + (i - 100000) * 0.075; break;
case 2:
case 3: bonus = bon2 + (i - 200000) * 0.05; break;
case 4:
case 5: bonus = bon4 + (i - 400000) * 0.03; break;
case 6:
case 7:
case 8:
case 9: bonus = bon6 + (i- 600000) * 0.015; break;
case 10:bonus = bon10 + (i - 100000) * 0.01;
}
printf("奖金是%10.2f", bonus);
system("pause");
return 0;
}
scanf_s("%ld", i);
->
scanf_s("%ld", &i);
从语法上面讲,析构函数抛出异常是可以的,C++并没有禁止析构函数引发异常,但是C++不推荐这一做法,从析构函数中抛出异常是及其危险的。
析构函数可能在对象正常结束生命周期时调用,也可能在有异常发生时从函数堆栈清理时调用。前一种情况抛出异常不会有无法预料的结果,可以正常捕获;但后一种情况下,因为函数发生了异常而导致函数的局部变量的析构函数被调用,析构函数又抛出异常,本来局部对象抛出的异常应该是由它所在的函数负责捕获的,现在函数既然已经发生了异常,必定不能捕获,因此,异常处理机制只能调用terminate()。若真的不得不从析构函数抛出异常,应该首先检查当前是否有仍未处理的异常,若没有,才可以正常抛出。