求助: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
相关产品推荐
相关产品推荐

