鱼C论坛

 找回密码
 立即注册
查看: 2786|回复: 2

输出格式问题

[复制链接]
发表于 2012-4-25 12:13:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 henrywsnew 于 2012-4-25 12:26 编辑

#include<stdio.h>
#include<math.h>
int main(void)
{
        int a;
        a=1 /3;
        printf("%25.15f\n%o\n",a,a);
        
        printf("%o\n",a);
        
        return 0;
}
执行后输出
       0.000000000000000(小数点后15个0)
11017744
0

请老师解释一下第一行输出语句为什么是以上结果,主要是11017744是怎么回事。

#include<stdio.h>
#include<math.h>
int main(void)
{
double a=12345678954321;
printf("%f%e\t%g\n",a,a,a);
return 0;
}
运行结果:
12345678954321.000000        1.234568e+013          1.23457e+013
为什么后两个数的最后一位不同呢?谭书上说用g格式符时,系统自动选f或e格式输出,选择其中长度较短的格式,不输出无意义的0,从我的结果看是不是谭的说法有误?


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-25 12:44:05 | 显示全部楼层
第一个程序,a是int型的,int型不能够用%f输出,否则会发生错误,但是检查不出来语法错误,就算运行出来也有可能会影响后面的值,所以第二个值11017744根本就是一个错误的值,没有意义。
第二个程序,书上说的没错,你也没有理解错误,只是g会选择f或者e输出,但是绝对不会输出多余的0(f输出后,小数点右边的0就是多余的),但是编译器会取一定的长度,所以会输出1.23457e+013相比用e输出少了一个8,这个没什么影响。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-25 13:01:00 | 显示全部楼层
谢谢
第一个输出格式错误竟然能影响到第二个输出格式正确的,真是太神奇了啊,科幻电影上计算机发疯了是不是都是因为这个原因啊。看书看到现在觉得不应该会出现这个现象啊,有没有其它原因。第二个问题可能是像你说的编译器对g格式和e格式输出的长度不同
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-14 02:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表