Printf参数顺序被忽略

时间:2014-11-08 21:09:51

标签: c++ c printf

我是否正确使用此功能?我以前从未见过这种情况:

printf("Pulled value %d from index %d\n", prev[block_size-k+i], block_size-k+i);
printf("Pulled value %d from index %d\n", block_size-k+i, prev[block_size-k+i]);

输出

Pulled value 7 from index 0
Pulled value 7 from index 0

您可以看到参数的顺序现在并不重要。我完全失去了

为了清晰起见,我也会拆开它们

printf("Pulled value %d\n", prev[block_size-k+i]);
printf("from index %d\n", block_size-k+i);

输出

Pulled value 0
from index 7

2 个答案:

答案 0 :(得分:2)

  

尽管prev数组的内容是双精度数,但不是整数

这是你的问题。参数的类型必须与printf期望的类型匹配,并且在大多数编译器上没有自动检查。 %d用于int类型,使用%f表示浮点数或将转换符插入int。

浮点数具有不同的字节格式,并且在许多系统上是8个字节(从技术上讲,浮点数在传递给printf时自动转换为double)而int是4,所以它只是巧合的是,你的两个印刷语句看起来是一样的。

答案 1 :(得分:0)

如果prev是双重使用%f作为占位符:

示例:

#include <stdio.h>

int main() {

    double a = 0;
    int b = 7;


    printf("Pulled value %.0f from index %d\n", a, b);
    printf("Pulled value %d from index %.0f\n", b, a);



    return 0;

}

输出:

Pulled value 0 from index 7
Pulled value 7 from index 0