return 0在程序中的影响

今天遇到这样一道题
在这里插入图片描述
在借鉴了别人的做法后终于写出了(其实是抄出了)代码

这是第一版

#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时,调试出现问题
输入非法字符串时,输出ERROR的同时也输出了x1
分母为0时调试无法进行

这时对比正确的写法,发现少了return 0

当分母为0时,缺少return 0会接着进入switch的循环中,直接到case’ / ',从而数组越界的情况

当输入非法字符串时,输出ERROR后用的是break,只是结束了这个switch循环,while循环并没有结束,会接着把sum赋值给x1,从而出现输出结果还有x1的情况;当改为return 0后,程序会自动结束运行(跳到最后的return 0)

今天这个题需要以后在写一写,一是没做出来,没有想到用switch循环这个方法,二是记住return 0的作用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值