将 printf 移动到不同的行会产生不同的输出? (C)

2024-02-17

在 C 中,当我移动此 printf 行时:printf("%f\n", 5 / 2);对于不同的线路,其输出会发生变化。有任何想法吗?

代码如下:

#include <stdlib.h>
#include <stdio.h>


int main()
{   

    int a = 65;
    char c = (char)a;
    int m = 3.0/2;

    printf("%c\n", c);              
    printf("%f\n", (float)a);       
    printf("%f\n", 5.0 / 2);        
    printf("%f\n", 5 / 2.0);        
    printf("%f\n", (float)5 / 2);   
    printf("%f\n", 5 / (float)2); 
    printf("%f\n", (float)(5 / 2)); 
    printf("%f\n", 5.0 / 2);        
    printf("%d\n", m);              
    printf("%f\n", 5 / 2);


    system("PAUSE");
    return(0);
}

这是输出:

A
65.000000
2.500000
2.500000
2.500000
2.500000
2.000000
2.500000
1
2.500000

如果我移动printf("%f\n", 5 / 2);对于第一行之一(在输出 A 的行和输出 65.000000 的行之间),它将打印 0.000000(这是有道理的),而不是现在的 2.500000。 有任何想法吗?


您的代码正在调用未定义的行为。

您有义务使用正确的数据说明符来打印内容printf,如果不这样做就会调用 UB。因此,在不同的地方得到不同的结果并不重要,也并不奇怪。

http://en.cppreference.com/w/c/io/fprintf http://en.cppreference.com/w/c/io/fprintf

如果转换规范无效,则行为未定义。

这同样适用于 c。

当调用未定义的行为时,结果根据定义是随机的且不可预测的,因此要求我们预测它们没有什么意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 printf 移动到不同的行会产生不同的输出? (C) 的相关文章

随机推荐