C语言double型和float型,float型和double型的有关问题

本文讨论了在C语言中将float型转换为double型后,使用printf函数进行输出时遇到的问题。当使用double型代替float型时,程序原本能正确显示float型分数的部分,在double型下却只显示0。原因在于printf函数的格式说明符%d用于整数输出,而非浮点数。正确的做法是使用%f或%lf来输出double型的分数。
摘要由CSDN通过智能技术生成

当前位置:我的异常网» C语言 » float型和double型的有关问题

float型和double型的有关问题

www.myexceptions.net  网友分享于:2014-04-18  浏览:6次

float型和double型的问题

有段程序是这样的:

struct stu

{

int num;

char *name;

char sex;

float score;

} boy1={102,"Zhang ping",'M',78.5},*pstu;

main()

{

pstu=&boy1;

printf("Number=%d\nName=%s\n",boy1.num,boy1.name);

printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);

printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);

printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);

printf("Number=%d\nName=%s\n",pstu->num,pstu->name);

printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);

},运行正常,但是在我用double型替换float型后,如下,score项只显示0,这是为什么呢?

struct stu

{

int num;

char *name;

char sex;

double score;

} boy1 = { 102, "Zhang ping", 'M', 78.5 }, *pstu;

void main()

{

pstu = &boy1;

printf("Number=%d\nName=%s\n", boy1.num, boy1.name);

printf("Sex=%c\nScore=%d\n\n", boy1.sex, boy1.score);

printf("Number=%d\nName=%s\n", (*pstu).num, (*pstu).name);

printf("Sex=%c\nScore=%d\n\n", (*pstu).sex, (*pstu).score);

printf("Number=%d\nName=%s\n", pstu->num, pstu->name);

printf("Sex=%c\nScore=%d\n\n", pstu->sex, pstu->score);

}

------解决方案--------------------

The type character is the only required format field; it appears after optional format fields.

The type character determines whether the associated argument is interpreted as a character, string, or number.

The types C and S, and the behavior of c and s with printf functions, are Microsoft extensions and are not ANSI-compatible.

printf Type Field Characters

Character Type Output Format

c int or wint_t When used with printf functions, specifies a single-byte character.

C int or wint_t When used with printf functions, specifies a wide character.

d int Signed decimal integer.

i int  Signed decimal integer.

o int  Unsigned octal integer.

u int  Unsigned decimal integer.

x int Unsigned hexadecimal integer, using "abcdef."

X int Unsigned hexadecimal integer, using "ABCDEF."

e  double Signed value having the form [ – ]d.dddd e [sign]ddd where d is a single decimal digit, dddd is one or more decimal digits, ddd is exactly three decimal digits, and sign is + or –.

E double Identical to the e format except that E rather than e introduces the exponent.

f double Signed value having the form [ – ]dddd.dddd, where dddd is one or more decimal digits.

The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision.

g double Signed value printed in f or e format, whichever is more compact for the given value and precision.

The e format is used only when the exponent of the value is less than –4 or greater than or equal to the precision argument.

Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.

G double Identical to the g format, except that E, rather than e, introduces the exponent (where appropriate).

n  Pointer to integer  Number of characters successfully written so far to the stream or buffer; this value is stored in the integer whose address is given as the argument.

p Pointer to void Prints the address of the argument in hexadecimal digits.

s String  When used with printf functions, specifies a single-byte–character string.

Characters are printed up to the first null character or until the precision value is reached.

S String When used with printf functions, specifies a wide-character string.

Characters are printed up to the first null character or until the precision value is reached.

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值