为何输入非+-*/运算符时,默认分支执行后返回值始终为6?
问题:执行default分支时返回值异常的原因
代码示例
#include <stdio.h> int calculator(int num1,int num2, char p) { switch(p) { case '+': return num1+num2; case '-': return num1-num2; case '*': return num1*num2; case '/': return num1/num2; default: printf("Error\n"); break; } } int main() { int num1,num2,answer=0; char p; while(1) { answer=0; printf("Enter 2 numbers\n"); scanf("%d%d",&num1,&num2); printf("Enter the operator\n"); scanf(" %c",&p); answer=calculator(num1,num2,p); printf("the answer is %d\n",answer); } return 0; }
异常现象
输入示例:
输入两个数字
第一个数字:4
第二个数字:8
输入运算符
运算符:H
输出结果:
Error
the answer is 6
原因分析
问题出在calculator函数的default分支:当匹配到无效运算符进入该分支时,函数执行完printf("Error\n")和break后,没有返回任何值就直接退出了。
C语言规定,声明了返回值类型的函数(这里是int类型)必须确保所有执行路径都有明确的return语句。如果没有,函数会返回栈上的随机残留数据——你看到的6只是当前环境下栈里刚好存在的数值,换个环境或者执行时机,这个值可能会变成其他数字。
修复方案
给default分支添加明确的返回值,比如用-1标记错误:
default: printf("Error\n"); return -1; // 添加返回值
或者在函数末尾统一添加返回语句(更推荐在分支内直接处理),这样就能避免接收垃圾值的问题。
内容的提问来源于stack exchange,提问作者mostafa mohamed
相关产品推荐
相关产品推荐

