user29448 user29448 - 1 year ago 54
Linux Question

Unexpected behavior from beginner C program

I am working to learn about computing at a more granular level and have started studying both Linux and C at the same time. Smooth sailing until just now.

I am running Linux Mint 17 on Kernel 3.16.0-38-generic and using Code::Blocks 13.12 as my IDE.

The following pastes are my practice code using data types, variables, and printf(), and the associated output I see in a vt -- the oddity I see is that on my experimentation with decimal places using the float data type, it seems to be skipping values after the 5th and eventually 4th decimal place.

Am I abusing the process of calling a variable, am I missing a bug in my code, or is this a bug in CodeBlocks? Also -- I'm not sure why my code snippet is completely mashed together in the preview, so my apologies for the poor readability

code to be compiled and executed:

/* 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;

output of compiled and executed code

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.

Thank you for any help you can provide. I am studying from C Programming Absolute Beginner - by Greg Perry

Answer Source

As was mentioned in the comments, the last digit is being rounded.

If you had this:

float f1 = 0.777777;

The output would be this:

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

Similarly, if you had this:

float f1 = 0.999888;

You'd get this:

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download