c中的双精度整数转换

c中的双精度整数转换,c,casting,C,Casting,我有以下代码: #include <stdio.h> int main () { double d = 10; int x = 5; x = (int) d + x; d = (double)x + d; printf("%lf\n" , d); printf("%d\n" , x); } 为什么这适用于int而不适用于double? 如何使它工作?对我来说很好 编辑:记住添加返回0对我来说很好 编辑:记住在C89中添加返回0,

我有以下代码:

#include <stdio.h>

int main ()
{
    double d = 10;
    int x = 5;

    x = (int) d + x;
    d = (double)x + d;

    printf("%lf\n" , d);
    printf("%d\n" , x);
}
为什么这适用于int而不适用于double? 如何使它工作?

对我来说很好

编辑:记住添加返回0对我来说很好

编辑:记住在C89中添加返回0,使用%f格式说明符打印双精度值。对于较新的标准,您可能会使用%lf,在这种情况下,l没有效果,它是为了与scanf对称而引入的,但这只是自找麻烦,因为它在以前的标准中没有定义

#include <stdio.h>

int main(void)
{
    double d = 10;
    int x = 5;

    x = (int) d + x;
    d = (double)x + d;

    printf("%f\n", d);
    printf("%d\n", x);

    return 0;
}
请注意,在C89中,您可能应该添加return 0;。使用C99/C11返回0;在省略时隐式添加,除了直接在main中调用exit函数外,它也用于此操作。

在C89中,使用%f格式说明符打印双值。对于较新的标准,您可能会使用%lf,在这种情况下,l没有效果,它是为了与scanf对称而引入的,但这只是自找麻烦,因为它在以前的标准中没有定义

#include <stdio.h>

int main(void)
{
    double d = 10;
    int x = 5;

    x = (int) d + x;
    d = (double)x + d;

    printf("%f\n", d);
    printf("%d\n", x);

    return 0;
}

请注意,在C89中,您可能应该添加return 0;。使用C99/C11返回0;当省略时,会隐式添加到直接在main中调用exit函数的异常中,这也用于此操作。

您确定吗?当我运行这个程序时,我得到了25.000000和15,你已经给了我们程序的输出。但为什么输出是错误的?你期望它是什么?你为什么希望是这样?你确定吗?当我运行这个程序时,我得到了25.000000和15,你已经给了我们程序的输出。但为什么输出是错误的?你期望它是什么?为什么会这样?因为在可变参数函数中float/%f被提升为double/%lf,所以%lf和%f不应该相同吗?或者这是一个非标准的扩展名?%lf在printf中与%f相同,至少从C99开始是这样。难道%lf和%f不应该相同吗?因为在可变参数函数中float/%f被提升为double/%lf?或者这是一个非标准扩展?%lf在printf中与%f相同,至少从C99开始。我想这取决于编译器。你的代码是fine@Simon在C99的main中不需要return。没有它,代码很好。@Pascal Cuoq您需要返回0;在ideone上编译时,避免运行时错误。西蒙的陈述是正确的。然而,答案打印出来了fine@PrasanthLouis在ideone.com中,选择“C99”作为语言。这比C90有几个优点。@Pascal Cuoq哦,非常感谢。我的观点是正确的。我想这取决于编译器。你的代码是fine@Simon在C99的main中不需要return。没有它,代码很好。@Pascal Cuoq您需要返回0;在ideone上编译时,避免运行时错误。西蒙的陈述是正确的。然而,答案打印出来了fine@PrasanthLouis在ideone.com中,选择“C99”作为语言。这比C90有几个优点。@Pascal Cuoq哦,非常感谢。我被纠正了。
#include <stdio.h>

int main(void)
{
    double d = 10;
    int x = 5;

    x = (int) d + x;
    d = (double)x + d;

    printf("%f\n", d);
    printf("%d\n", x);

    return 0;
}