今天遇到这样一道题
在借鉴了别人的做法后终于写出了(其实是抄出了)代码
这是第一版
#include<stdio.h>
int main(){
char gh;
int x1,x2,sum=0;
scanf("%d",&x1);
while((gh=getchar())!='='){
scanf("%d",&x2);
if(gh=='/'&&x2==0){
printf("ERROR\n");
}
switch(gh){
case '+':sum=x1+x2;break;
case '-':sum=x1-x2;break;
case '*':sum=x1*x2;break;
case '/':sum=x1/x2;break;
default:printf("ERROR\n");break;
}
x1=sum;
}
printf("%d",x1);
return 0;
}
运行时发现,输入非法字符和分母为0时,调试出现问题
这时对比正确的写法,发现少了return 0
当分母为0时,缺少return 0会接着进入switch的循环中,直接到case’ / ',从而数组越界的情况
当输入非法字符串时,输出ERROR后用的是break,只是结束了这个switch循环,while循环并没有结束,会接着把sum赋值给x1,从而出现输出结果还有x1的情况;当改为return 0后,程序会自动结束运行(跳到最后的return 0)
今天这个题需要以后在写一写,一是没做出来,没有想到用switch循环这个方法,二是记住return 0的作用