在 Code::Blocks 中 c 语言的程序运行结果有误,如何处理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
l9mhd
V2EX    编程

在 Code::Blocks 中 c 语言的程序运行结果有误,如何处理?

  •  
  •   l9mhd 2020-01-22 19:12:28 +08:00 3852 次点击
    这是一个创建于 2101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    代码 1

    #include<stdio.h> int main(){ double a,b; a = 0.15; b = (int)( a*10+0.5 ); printf("%.1f",b); return 0; } 

    输出 1.0

    代码 2

    #include<stdio.h> int main(){ double a,b; a = 0.15; b = a*10+0.5; b = (int)b; printf("%.1f",b); return 0; } 

    输出 2.0

    之后用线上编译器( https://rextester.com/l/c_online_compiler_gcc ) 测试,两段代码结果一致,都是 2.0

    尝试解决

    从官网中重新下载安装,但是问题没有解决,运行结果仍然不一致。

    • 这种情况是什么原因导致的?
    • 我可以做些什么?

    谢谢!

    第 1 条附言    2020-01-22 19:54:11 +08:00

    反编译结果如下:

    Project title : test Project path : F:\test\ Frame function: main (F:\test\main.c:8) Frame address : 0x60ff10 -------------------------------------------------------------------------------- 0x401350 push %ebp 0x401351 mov %esp,%ebp 0x401353 and $0xfffffff0,%esp 0x401356 sub $0x30,%esp 0x401359 call 0x401970 <__main> 0x40135e fldl 0x403030 0x401364 fstpl 0x28(%esp) 0x401368 fldl 0x28(%esp) 0x40136c fldl 0x403038 0x401372 fmulp %st,%st(1) 0x401374 fldl 0x403040 0x40137a faddp %st,%st(1) 0x40137c fnstcw 0x1e(%esp) 0x401380 movzwl 0x1e(%esp),%eax 0x401385 mov $0xc,%ah 0x401387 mov %ax,0x1c(%esp) 0x40138c fldcw 0x1c(%esp) 0x401390 fistpl 0x14(%esp) 0x401394 fldcw 0x1e(%esp) 0x401398 fildl 0x14(%esp) 0x40139c fstpl 0x20(%esp) 0x4013a0 fldl 0x20(%esp) 0x4013a4 fstpl 0x4(%esp) 0x4013a8 movl $0x403028,(%esp) 0x4013af call 0x401be0 <printf> 0x4013b4 mov $0x0,%eax 0x4013b9 leave 0x4013ba ret 
    des
        1
    des  
       2020-01-22 19:19:43 +08:00 via Android   1
    可以把有问题的程序反汇编了看看
    kokutou
        2
    kokutou  
       2020-01-22 19:41:34 +08:00
    你可以
    1 以后都用代码 2 的写法。
    2 以后都不要强制转类型。
    l9mhd
        3
    l9mhd  
    OP
       2020-01-22 19:56:40 +08:00
    @des 您好!我把代码 1 反编译出来的 txt 复制到附言上了。
    小红点在开头和结尾,然后编译的,不过我不明白这些是什么意思,能麻烦您看一看吗?
    l9mhd
        4
    l9mhd  
    OP
       2020-01-22 20:02:46 +08:00
    @kokutou 我目前正在学习编程,我不太确定这是不是软件的问题,有点担心在代码中出现了这样的情况以后会难以辨别出来。
    关于强制转类型,这段代码,a 赋值输入的内容,b 再除以 10,用于保留小数后一位(四舍五入),在这里强制转类型是用于省略去小数部分的值,我不知道有没有别的实现方式。
    Cielsky
        5
    Cielsky  
       2020-01-22 20:50:29 +08:00 via Android   1
    codeblock 编译器的问题吧,估计是遗留 bug
    调试看了下
    (int)(a~)为 2
    在向 double 类型转换的时候结果错了
    其他编译器试了下没遇到这个问题
    kokutou
        6
    kokutou  
       2020-01-22 20:57:18 +08:00   1
    @l9mhd #4

    https://visualstudio.microsoft.com/vs/community/

    如果要学。。建议用 vs
    如果你能搞定科学上网,那建议 msys2+vscode
    l9mhd
        7
    l9mhd  
    OP
       2020-01-22 21:08:01 +08:00
    @Cielsky 好的,多谢!
    l9mhd
        8
    l9mhd  
    OP
       2020-01-22 21:20:30 +08:00
    @kokutou 我下载了,但是我在语言列表里没找到 c (我现在只学了 c ),感觉还要一段时间学习怎么用
    mxalbert1996
        9
    mxalbert1996  
       2020-01-22 21:43:54 +08:00 via Android
    @l9mhd 你至少应该知道 C++完全兼容 C 吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1072 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:58 PVG 01:58 LAX 10:58 JFK 13:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86