Pregunta

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
¿Fue útil?

Solución

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.

Otros consejos

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".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top