You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何输入非+-*/运算符时,默认分支执行后返回值始终为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:52:52