문제

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
도움이 되었습니까?

해결책

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.

다른 팁

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top