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

2020-01-22 19:12:28 +08:00
 l9mhd

问题

代码 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

尝试解决

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

谢谢!

3467 次点击
所在节点    编程
9 条回复
des
2020-01-22 19:19:43 +08:00
可以把有问题的程序反汇编了看看
kokutou
2020-01-22 19:41:34 +08:00
你可以
1 以后都用代码 2 的写法。
2 以后都不要强制转类型。
l9mhd
2020-01-22 19:56:40 +08:00
@des 您好!我把代码 1 反编译出来的 txt 复制到附言上了。
小红点在开头和结尾,然后编译的,不过我不明白这些是什么意思,能麻烦您看一看吗?
l9mhd
2020-01-22 20:02:46 +08:00
@kokutou 我目前正在学习编程,我不太确定这是不是软件的问题,有点担心在代码中出现了这样的情况以后会难以辨别出来。
关于强制转类型,这段代码,a 赋值输入的内容,b 再除以 10,用于保留小数后一位(四舍五入),在这里强制转类型是用于省略去小数部分的值,我不知道有没有别的实现方式。
Cielsky
2020-01-22 20:50:29 +08:00
codeblock 编译器的问题吧,估计是遗留 bug
调试看了下
(int)(a~)为 2
在向 double 类型转换的时候结果错了
其他编译器试了下没遇到这个问题
kokutou
2020-01-22 20:57:18 +08:00
@l9mhd #4

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

如果要学。。建议用 vs
如果你能搞定科学上网,那建议 msys2+vscode
l9mhd
2020-01-22 21:08:01 +08:00
@Cielsky 好的,多谢!
l9mhd
2020-01-22 21:20:30 +08:00
@kokutou 我下载了,但是我在语言列表里没找到 c (我现在只学了 c ),感觉还要一段时间学习怎么用😂
mxalbert1996
2020-01-22 21:43:54 +08:00
@l9mhd 你至少应该知道 C++完全兼容 C 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX