我认为double和float之间的区别是小数的精度。但是,我使用double和float会得到奇怪的结果,并且它们彼此不相邻。
第一段代码与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
答案 0 :(得分:15)
在第二个示例中,%d
用于整数。 ( d 不是 double 的缩写,但是十进制)
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
的格式说明符与scanf
和printf
不同,this C FAQ article有一些很好的解释。
答案 1 :(得分:2)
您的上一个printf
格式字符串错误。应该是。
printf ("The absolute value of %.2f is %.2f\n", number, absNumber);
如果您启用所有编译器警告(例如使用gcc -Wall -g
进行编译),您将收到有关该警告的警告。始终在编译器中启用所有警告。
您的scanf
也是错误的,应该是scanf("%lf", &number);
并且编译器会警告您的所有警告。
BTW,scanf
返回“成功匹配的项目数”,您应该测试其结果。
您确实需要仔细阅读printf(3)和scanf(3)的文档。 (在linux终端中,您可以键入man 3 printf
来获取它。)
请注意,参数转换为double
,double
的转换说明符为%f
中的printf
和%lf
中的scanf
您应该学习如何使用调试器(例如gdb
)。
答案 2 :(得分:2)
在你的第二个程序中,你使用%d格式说明符来表示错误。这就是你得到错误的原因。您应该使用%lf(长浮点或更好称为'double')进行打印。
对于其他格式说明符,
我想这可能会对你有所帮助
a link
您还可以通过键入“格式说明符”在Google上搜索不同的格式说明符。
答案 3 :(得分: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
答案 4 :(得分:0)
如果您阅读manual,则"%d"
表示整数。您需要"%lf"
代替。
使用printf
同上