gpt4 book ai didi

c - C 中的浮点输出/输入问题

转载 作者:行者123 更新时间:2023-11-30 20:44:25 25 4
gpt4 key购买 nike

我希望您帮助理解以下内容:

对于代码:

int main() {
int i=23;
float f=7.5;

printf("%f", i);
return 1;
}

输出为0.000000 ,怎么不是7.500000

查看代码

int main() {
int i=23;
float f=7.5;

printf("%d\n",f);
printf("%f",i);
return 1;
}

输出为1455115000, 7.500000 。为什么编译不会出错? 1455115000 这个数字是什么?为什么现在要打印 7.500000?

最佳答案

printf 调用中的格式/参数不匹配会导致未定义的行为。如果您调高警告级别,编译器可能会告诉您这一点。例如,clang 会对您的第一个程序发出此警告:

example.c:5:10: warning: conversion specifies type 'double' but the argument has
type 'int' [-Wformat]
printf("%f", i);
~^ ~
%d

还有这些是你的第二个:

example.c:5:10: warning: conversion specifies type 'int' but the argument has
type 'double' [-Wformat]
printf("%d\n",f);
~^ ~
%f
example.c:6:10: warning: conversion specifies type 'double' but the argument has
type 'int' [-Wformat]
printf("%f",i);
~^ ~
%d

而且根本没有特殊标志。默认情况下,gcc 也会对您的程序发出警告。示例1:

example.c:5: warning: format ‘%f’ expects type ‘double’, but argument 2 has type ‘int’

示例2:

example.c:5: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’
example.c:6: warning: format ‘%f’ expects type ‘double’, but argument 2 has type ‘int’

这两个编译器也会警告您的 printf 隐式声明,但我保留了这些消息,因为它们与您的问题并不严格相关。

关于c - C 中的浮点输出/输入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com