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

C语言scanf执行后printf输出错误(如输入5输出6618624)问题问询

问题根源

数值读取错误是两个叠加问题导致的:

  • 全局变量num1、num2被getNumber的同名形参屏蔽:函数内部操作的&num1、&num2是形参(局部变量)的地址,根本没有修改全局的num1、num2,全局变量一直保持初始的随机值,后续运算自然出错。
  • C语言默认是值传递:就算没有定义同名全局变量,直接把num1、num2作为值传入函数,修改的也只是函数栈上的临时副本,不会影响外部的变量。
修复方案

下面给出两种常用修复方式,按需选择即可:

方案1:简化全局变量用法(改动最小)

既然已经定义了全局的num1、num2,直接删掉getNumber的形参即可,不需要传参:

// 1. 修改函数声明,去掉形参
void getNumber();

int main(){
    getNumber(); // 调用也不用传参
    operation_menu();
    return 0;
}

// 2. 函数定义去掉形参,直接操作全局变量
void getNumber(){
    printf("Welcome to Simple Calculator!\n");
    printf("Please input a number to begin:\n");
    scanf("%d", &num1);
    printf("Great! Now input the second number:\n");
    scanf("%d", &num2);
}

方案2:去掉全局变量,用指针传参(更规范的写法)

全局变量容易出现命名冲突、逻辑混乱的问题,更推荐用指针传递地址,直接修改外部变量:

// 删掉全局的num1、num2定义
void operation_menu(int num1, int num2);
// 形参改为int*指针类型
void getNumber(int* num1, int* num2);

int main(){
    int num1, num2; // 改为main函数内的局部变量
    getNumber(&num1, &num2); // 传入变量地址
    operation_menu(num1, num2);
    return 0;
}

void getNumber(int* num1, int* num2){
    printf("Welcome to Simple Calculator!\n");
    printf("Please input a number to begin:\n");
    // 直接对传入的地址对应的内存赋值,修改外部变量
    scanf("%d", num1);
    printf("Great! Now input the second number:\n");
    scanf("%d", num2);
}

// operation_menu也改成接收参数,不用全局变量
void operation_menu(int num1, int num2){
    int choice;
    printf("Select an operation: \n");
    printf("1. Addition\n");
    printf("2. Subtraction\n");
    printf("3. Multiplication\n");
    printf("4. Division\n");
    scanf("%d", &choice);
    // 后面的switch逻辑保持原有写法即可
}

额外优化建议

当前的除法逻辑没有做除数为0的判断,用户输入第二个数为0时会出现运行崩溃,可以在运算前加判断:

case 4:
    if(num2 == 0){
        printf("Error: divisor cannot be zero.");
    }else{
        printf("The quotient of %d and %d is %.2lf.", num1,num2,quot(num1, num2));
    }
break;

内容的提问来源于stack exchange,提问作者Lapnesnoj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:04