相关疑难解决方法(0)

printf指定float的整数格式字符串

#include <stdio.h>

int main()
{
    float a = 5;
    printf("%d", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

0
Run Code Online (Sandbox Code Playgroud)

为什么输出为零?

c printf casting

10
推荐指数
5
解决办法
2万
查看次数

如何在printf中处理float/double到int的转换?

考虑这个计划

int main()
{
        float f = 11.22;
        double d = 44.55;
        int i,j;

        i = f;         //cast float to int
        j = d;         //cast double to int

        printf("i = %d, j = %d, f = %d, d = %d", i,j,f,d);
        //This prints the following:
        // i = 11, j = 44, f = -536870912, d = 1076261027

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么从double/float到int的转换在第一种情况下正常工作,并且在printf中完成时不起作用?
该程序是在32位linux机器上的gcc-4.1.2上编译的.


编辑: Zach的答案似乎是合乎逻辑的,即使用格式说明符来确定从堆栈弹出的内容.但是请考虑这个后续问题:

int main()
{

    char c = 'd';    // sizeof c is 1, however sizeof …
Run Code Online (Sandbox Code Playgroud)

c

10
推荐指数
2
解决办法
2万
查看次数

将int作为float打印时printf的行为是什么?

我在windows7上使用dev cpp来编译我的代码.

int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %d | %x | %#1x | %#1x | %#1x |%p\n", d,  e[0], e[1], e[2], e[3], &e[0]);
getchar();

4 4 
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43  
18 | 12 | 0 | 0 | 0 |0028FF40
Run Code Online (Sandbox Code Playgroud)

你看,如果我使用%d打印d,它打印4个字节的精细.但是,如果我使用下面的%f,它会在必须打印e的第一个字节的位置显示零.任何人都可以帮助解决为什么会这样 为什么e的内容取决于d的格式?

int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof …
Run Code Online (Sandbox Code Playgroud)

c floating-point int printf casting

1
推荐指数
1
解决办法
2539
查看次数

标签 统计

c ×3

casting ×2

printf ×2

floating-point ×1

int ×1