初学者C程序的意外行为

时间:2016-09-23 20:55:51

标签: c linux codeblocks

我正在努力学习更精细的计算,并且已经开始同时学习Linux和C.顺利航行直到现在。

我在Kernel 3.16.0-38-generic上运行Linux Mint 17,并使用Code :: Blocks 13.12作为我的IDE。

下面的贴片是我使用数据类型,变量和printf()的练习代码,以及我在vt中看到的相关输出 - 我看到的奇怪之处在于我在使用float数据类型的小数位实验中,它似乎是在第5位之后跳过值,最后是小数点后第4位。

我是否滥用调用变量的过程,我错过了代码中的错误,或者这是CodeBlocks中的错误?另外 - 我不确定为什么我的代码片段在预览中完全混合在一起,所以我为可读性差而道歉

要编译和执行的代码:

/* Prints a message on the screen */

#include <stdio.h>
echar a1 = 'a';
int i1 = 1;

float f1 = 0.123456;

int main()

{
    printf("Testing %c la%sof characters using variables \n", a1, "rge string " );
    printf("This line has the values %d and %f.\n", i1, f1);
    printf("%f can also be displayed as %.5f or %.4f or %.3f or %.2f or %.1f or %.0f \n", 
        f1, f1, f1, f1, f1, f1, f1);
    printf("Which is an integer . . .");
    return 0;
}

编译和执行代码的输出

Testing a large string of characters using variables
This line has the values 1 and 0.123456.
0.123456 can also be displayed as 0.12346 or 0.1235 or 0.123 or 0.12 or 0.1 or 0
Which is an integer . . .  
Process returned 0 (0x0)   execution time : 0.002 s  
Press ENTER to continue.

感谢您提供的任何帮助。我正在学习C编程绝对初学者 - 格雷格佩里

1 个答案:

答案 0 :(得分:3)

正如评论中所提到的,最后一位数字正在四舍五入。

如果你有这个:

float f1 = 0.777777;

输出将是:

This line has the values 1 and 0.777777.
0.777777 can also be displayed as 0.77778 or 0.7778 or 0.778 or 0.78 or 0.8 or 1

同样,如果你有这个:

float f1 = 0.999888;

你会得到这个:

This line has the values 1 and 0.999888.
0.999888 can also be displayed as 0.99989 or 0.9999 or 1.000 or 1.00 or 1.0 or 1