2301_79568964 2024-05-05 19:16 采纳率: 100%
浏览 3
已结题

关于#c语言#的问题:环境:vs2022community#include <stdio.h>

为什么输出的结果和调试出来的结果不一样呢?
环境:vs2022 community





#include <stdio.h>
int t = 13;
int fun(x, y)
int x, y;
{ int t = 3;
return(x * y - t);
}
main()
{
    int p;
    int x = 7, y = 5;
    p = fun(x, y);
    printf("%ld\n",p / t);
}


img

img


为什么输出的结果和调试出来的结果不一样呢?
环境:vs2022 community
****

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-05 19:16
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的C语言代码中,存在一些错误,导致了编译时的警告和运行时的行为不符合预期。以下是代码中的问题以及修复后的代码示例。

    问题1:函数原型与定义不匹配

    您的fun()函数在声明和定义之间缺少了参数列表的括号。这会导致编译器将xy当作函数返回类型的占位符,而不是实际的变量。修正后的函数定义应该是这样的:

    int fun(int x, int y) {
        int t = 3;
        return (x * y - t);
    }
    

    问题2:类型不匹配

    printf()函数中,%ld用于格式化长整型(long)数据,但p / t实际上是一个整数除法,可能得到的是一个整数结果。为了避免潜在的数据溢出,应该确保除数t和被除数p是相同类型的,并且结果会被正确地转换为适当的格式。这里我们不需要转换为长整型,所以可以去掉 %ld 前面的 l

    printf("%d\n", p / t);
    

    修复后的完整代码:

    #include <stdio.h>
    
    int t = 13;
    int fun(int x, int y) {
        int t = 3;
        return (x * y - t);
    }
    
    int main() {
        int p;
        int x = 7, y = 5;
        p = fun(x, y);
        printf("%d\n", p / t);
        
        return 0;
    }
    

    这个修复后的代码应该会按照预期工作,输出结果为 6,因为 p 的值为 26(7 * 5 - 3),然后除以 t 得到 6(26 / 3)。确保在VS2022 Community中保存并重新编译代码,然后运行程序查看结果。如果仍然存在问题,请检查是否有其他编译警告或错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 gojs 点击按钮node的position位置进行改变,再次点击回到原来的位置
  • ¥15 计算决策面并仿真附上结果
  • ¥20 halcon 图像拼接
  • ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
  • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥100 求ASMedia ASM1184e & ASM1187e 芯片datasheet/规格书
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么