Question

The following test code produces an undesired output, even though I used a width parameter:

int main(int , char* [])
{
    float test = 1234.5f;
    float test2 = 14.5f;

    printf("ABC %5.1f DEF\n", test);
    printf("ABC %5.1f DEF\n", test2);

    return 0;
}

Output

ABC 1234.5 DEF   
ABC  14.5 DEF

How to achieve an output like this, which format string to use?

ABC 1234.5 DEF   
ABC   14.5 DEF
Was it helpful?

Solution

The following should line everything up correctly:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

When I run this, I get:

ABC 1234.5 DEF
ABC   14.5 DEF

The issue is that, in %5.1f, the 5 is the number of characters allocated for the entire number, and 1234.5 takes more than five characters. This results in misalignment with 14.5, which does fit in five characters.

OTHER TIPS

You're trying to print something wider than 5 characters, so make your length specifier larger:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

The first value is not "digits before the point", but "total length".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top