Dodaję tę odpowiedź, aby określić zasady standardu.
Tutaj wykorzystuje się wartość zwracaną printf
. Odpowiednio 3-1
spacje (' '
), a następnie ponownie spacje (jak określono) i 4-1
spacje, a następnie ponownie 1 spacja jest drukowana. Następnie zwracana jest całkowita liczba zapisanych znaków. Tak właśnie się robi.
Pamiętam tylko tę regułę
printf("%*c",X,C) prints the char C in a field of size X
Wszystkie te zachowania są wyjaśnione w C11 Standard.
Od standardowego §7.21.6.1p4
Opcjonalny minimalną szerokość pola. Jeżeli wartość przekształcony ma mniej znaków niż szerokość pola, to jest spacjami (domyślnie) na lewo (lub w prawo, czy w lewo flaga regulacji opisanego dalej nadano) do szerokość pola. Szerokość pola przyjmuje postać gwiazdka *
(opisana poniżej) lub nieujemną liczbę całkowitą dziesiętną.
A w tej samej sekcji §7.21.6.1p5
Jak wspomniano powyżej, szerokość pola lub precyzji, lub jedno i drugie, mogą być oznaczone gwiazdką.W tym przypadku, int argumentu dostarcza szerokość pola lub precyzji
wreszcie §7.21.6.1.p14
Funkcja fprintf
Zwraca liczbę znaków przekazywane lub wartość ujemną jeśli wystąpił błąd wyjścia lub kodowania.
Aby wyczyścić swój pomysł ten przykład będzie na tyle dobry (używam %d
tutaj, aby uzyskać ideę tej dziedzinie).
Jeśli x = 10
i y=2
to będzie
printf("%*d%*d", x, x, y, y);
Wyraźniej
| | | | | | | | |1|0| |2|
1 2 3 4 5 6 7 8 9 10 \ \
11 12
That's how 12 characters are printed.
Ten kod ma także pewne znaczące skutki uboczne. –
tylko efekt uboczny Wiem, że przesuwa wyjście w zależności od liczby spacji, które dostaje jako dane wejściowe. coś jeszcze ? – Peps0791
Ale ten efekt uboczny jest poważny. Nie możesz po prostu powiedzieć, że to dziwny sposób na dodanie. –