switch的使用详解
#include <stdio.h>
enum outcome{FILISH=0,ERRORADDRESS,ERRORNUMBER};
int calculation(int a,int b,char op,float *r){
if(r==NULL){
return ERRORADDRESS;
}
if(b==0&&op=='/'){
return ERRORNUMBER;
}
switch(op){
case '*':
*r=a*b; break;
case '/':
*r=a/b; break;
case '-':
*r=a-b; break;
case '+':
*r=a+b; break;
}
return FILISH;
}
int main() {
int a=0,b=0;
float result=0;
char c=getchar();
scanf("%d%d",&a,&b);
int ret=calculation(a,b,c,&result);
if(ret==ERRORNUMBER){
printf("操作数输入错误!");
}
if(ret==ERRORADDRESS){
printf("地址错误!");
}
if(ret==FILISH){
printf("运算结果为:%f",result);
}
return 0;
}
enum Res {
NORMAL, NULLPTR,NUMZERO,ERRSYM
};
int cal(int a, int b, char sym, float * result) {
if (!result) {
return NULLPTR;
}
switch (sym) {
case '+':
*result = a + b;
break;
case '-':
*result = a - b;
break;
case '*':
*result = a * b;
break;
case '/':
if (b == 0) {
return NUMZERO;
}
else {
*result = (float)a / b;
}
break;
default: return ERRSYM;
}
return NORMAL;
}
int main() {
int a = 0;
int b = 0;
char sym = 0;
float result = 0;
int ret = NORMAL;
scanf("%d,%d,%c",&a,&b,&sym);
if (ret == NULLPTR) {
printf("地址错误");
}
else if (ret == NUMZERO) {
printf("除数不能为0");
}
else if (ret == ERRSYM) {
printf("输入运算符错误");
}
else {
cal(a, b, sym, &result);
printf("%.2f",result);
}
return 0;
}