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

求助:C程序无论修改代码、编译器或IDE,输出始终为同一数值

问题分析与解决办法

哦,我一眼就发现问题所在了!你在输出计算结果的时候犯了一个典型的C语言新手错误——你输出的是变量的内存地址,而不是变量存储的值。

看你代码里的这一行:

printf("Result: %d", &res);

这里的&是取地址运算符,它的作用是获取变量res在内存中的地址值,而不是res里存储的除法计算结果。这就是为什么你每次运行程序都得到同一个固定数值——这个数值其实是res变量每次被分配到的内存地址,在你的测试环境里,这个地址碰巧每次都一样,所以不管你换代码、编译器还是IDE,只要程序的内存布局没有大的变化,这个地址值就会重复出现。

就连你后来测试加法程序时,肯定也是不小心用了同样的写法(输出变量的地址而非值),所以才会得到同一个数。

两个关键修正点

  • 输出变量值而非地址:把printf里的&res改成res,这样才会输出变量存储的计算结果。
  • 调整除以0的判断顺序:你现在的代码是先执行res = n1/n2,再判断n2是否为0。如果用户输入的n2是0,那除法运算已经执行了,会直接触发除以0的运行时错误。正确的做法是先判断n2是否为0,再进行除法计算。

修正后的完整代码

#include <stdio.h>
int main () {
    int n1, n2, res;
    printf("Enter two numbers to divide.\n");
    scanf("%d", &n1);
    scanf("%d", &n2);
    
    // 先判断除数是否为0,再计算
    if (n2 == 0) {
        printf("You cannot divide by 0!\n");
    } else {
        res = n1/n2;
        printf("Result: %d", res); // 去掉&,输出变量值
        printf("\n");
    }
    system("PAUSE");
    return 0; // 建议加上main函数的返回值,符合C标准
}

额外提醒

以后用printf输出普通变量的值时,千万不要加&符号,只有当你需要输出变量的内存地址(比如调试指针相关代码)时,才需要使用&,并且此时对应的格式符应该用%p(专门用于输出地址),而不是%d。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:08:21