No.2 抛出异常
虽然学了一年的C++,但仍然不常用throw try catch什么的,今天写一点,毕竟是真的实际有用。
1.返回类型为int
#include<iostream>
using namespace std;
int abc(int a, int b, int c) {
if (a <= 0 && b > 0 && c > 0) {
throw 1;
}
else if (a > 0 && b <= 0 && c > 0) { //仅列出来了两个参数错误的例子
throw 2;
}
return a + b*c;
}
int main() {
int a, b, c;
while (cin >> a >> b >> c) {
try {
cout << "The anwser is " << abc(a, b, c) << endl;
}
catch (int x) {
cout << "第" << x << "个参数错误!" << endl;
}
}
return 0;
}
运行结果:
2.返回类型为char *
#include<iostream>
#include<string>
using namespace std;
char* abc(int a, int b, int c) {
if (a <= 0 && b > 0 && c > 0) {
throw "WRONG 1 !";
}
else if (a > 0 && b <= 0 && c > 0) { //仅列出来了两个参数错误的例子
throw "WRONG 2 !";
}
int s = a + b*c;
char * str;
str = new char[50];
char * ch = {"This answer is "};
for (int i = 0; i <50; i++) {
str[i] = 0;
}
int i0 = 0;
for (;;) {
if (s == 0) {
break;
}
str[i0] = s % 10+'0';
s /= 10;
i0++;
}
char *str_n = new char[strlen(ch) + strlen(str) + 1];
strcpy(str_n, ch);
strcat(str_n, str);
return str_n;
}
int main() {
int a, b, c;
while (cin >> a >> b >> c) {
try {
cout << abc(a, b, c) << endl;
}
catch (char* x) {
cout << x<< endl;
}
}
return 0;
}
运行结果:
3.多返回类型捕捉
#include<iostream>
#include<string>
using namespace std;
char* abc2(int a, int b, int c) {
if (a <= 0 && b > 0 && c > 0) {
throw "WRONG 1 !";
}
else if (a > 0 && b <= 0 && c > 0) { //仅列出来了两个参数错误的例子
throw "WRONG 2 !";
}
int s = a + b*c;
char * str;
str = new char[50];
char * ch = {"This answer is "};
for (int i = 0; i <50; i++) {
str[i] = 0;
}
int i0 = 0;
for (;;) {
if (s == 0) {
break;
}
str[i0] = s % 10+'0';
s /= 10;
i0++;
}
char *str_n = new char[strlen(ch) + strlen(str) + 1];
strcpy(str_n, ch);
strcat(str_n, str);
return str_n;
}
int abc1(int a, int b, int c) {
if (a <= 0 && b > 0 && c > 0) {
throw 1;
}
else if (a > 0 && b <= 0 && c > 0) { //仅列出来了两个参数错误的例子
throw 2;
}
return a + b*c;
}
int main() {
int a, b, c;
while (cin >> a >> b >> c) {
try {
cout << "The anwser is " << abc1(a, b, c) << endl;
cout << abc2(a, b, c) << endl;
}
catch (char* x) {
cout << x << endl;
}
catch (int x) {
cout << "第" << x << "个参数错误!" << endl; //观察输出结果
}
}
return 0;
}
运行结果:
也就是说,会抛出第一个错误,然后停止运行(abc2并没有输出结果)。