2

我认为 double 和 float 之间的区别是小数的精度。但是,使用 double 和 float 我得到了奇怪的结果,而且它们彼此并不接近。

第一段代码与浮点格式一起使用,产生正确的结果:

#include <stdio.h>

#define ABSOLUTE_VALUE(number)      ( ((number) < 0) ? -(number) : (number) )

int main (void)
{
    float number, absNumber;


    printf ("What number do you want to check the absolute value for? : ");
    scanf  ("%f", &number);

    absNumber = ABSOLUTE_VALUE(number);

    printf ("The absolute value of %.2f is %.2f\n", number, absNumber);

    return 0;
}

输出:
你想检查哪个数字的绝对值?: -3
-3.00 的绝对值为 3.00

第二段代码与双重格式一起使用会产生不正确的结果:

#include <stdio.h>

#define ABSOLUTE_VALUE(number)      ( ((number) < 0) ? -(number) : (number) )

int main (void)
{
    double number, absNumber;


    printf ("What number do you want to check the absolute value for? : ");
    scanf  ("%d", &number);

    absNumber = ABSOLUTE_VALUE(number);

    printf ("The absolute value of %.2d is %.2d\n", number, absNumber);

    return 0;
}

输出:
你想检查哪个数字的绝对值?: -3
-03的绝对值为2147344384

4

5 回答 5

15

在第二个示例中,%d用于整数。(d不是double的缩写,而是decimal的缩写)

scanf  ("%d", &number);

应该

scanf  ("%lf", &number);

printf也是不正确的,因为%f用于double

printf ("The absolute value of %.2d is %.2d\n", number, absNumber);

相反,这应该是:

printf ("The absolute value of %.2f is %.2f\n", number, absNumber);

请注意,和的格式说明符不同,double这篇scanfC常见问题解答文章有一些很好的解释。printf

于 2013-08-09T05:10:46.000 回答
2

您的最后一个printf格式字符串是错误的。应该。

 printf ("The absolute value of %.2f is %.2f\n", number, absNumber);

如果您启用所有编译器警告(例如 compile with gcc -Wall -g),您将收到警告。始终启用编译器中的所有警告。

scanf也错了,应该是scanf("%lf", &number);编译器会警告你的所有警告。

顺便说一句,scanf返回“成功匹配的项目数”,您应该测试其结果。

您确实需要仔细阅读printf(3)scanf(3)的文档。(在 linux 终端中,您可以键入man 3 printf来获取它)。

请注意,参数被转换为,并且-sdouble的转换说明符是in和indouble%fprintf%lfscanf

您应该学习如何使用调试器(如gdb)。

于 2013-08-09T05:11:02.243 回答
2

在您的第二个程序中,您对 double 使用了 %d 格式说明符,这是错误的。这就是为什么你会出错。您应该使用 %lf (long float 或更好地称为 'double') 来打印它。对于其他格式说明符,我认为这可能会对您有所帮助。您
可以通过键入“格式说明符”在谷歌上搜索不同的格式说明符。

于 2013-08-09T05:18:33.980 回答
1

在 c中使用double数据类型进行2 处更改:

use %lf in scanf
use %f in printf

//remember : %d is for int
             %f is for float
             %c is for char
于 2015-10-15T22:49:08.323 回答
0

如果您阅读手册"%d"则适用于整数。你需要"%lf"

与 printf 同上

于 2013-08-09T05:12:37.943 回答