Co oznacza specyfikacja formatu % * s?

W kodzie, który muszę zachować, widziałem specyfikator formatu %*s . Czy ktoś może mi powiedzieć, co to jest i dlaczego jest stosowany?

Przykład jego użycia to:

fprintf(outFile, "\n%*s", indent, "");
Author: Jonathan Leffler, 2009-06-16

5 answers

Służy do dynamicznego określenia szerokości pola:

  • szerokość nie jest określona w łańcuchu formatu, ale jako dodatkowy argument wartości całkowitej poprzedzający argument, który musi być sformatowany.

Tak więc "indent" określa, ile miejsca należy przeznaczyć na ciąg znaków, który następuje po nim na liście parametrów.

Więc,

printf("%*s", 5, "");

Jest tym samym co

printf("%5s", "");

Jest to miły sposób, aby umieścić kilka spacji w swoim plik, unikając pętli.

 46
Author: akappa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 10:23:35

Nie używaj "% * s " na buforze, który nie jest zakończony NULL (spakowany) myśląc, że wyświetli tylko pole "length".

 8
Author: user2132064,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-19 15:24:40

Http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Szerokość nie jest określona w łańcuchu formatowania, ale jako dodatkowy argument o wartości całkowitej poprzedzający argument, który ma być sformatowany.

NP: {[0] } jest równoważna printf("%4s", myValue);.

 1
Author: pauldoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 10:08:45

* powoduje, że fprintf blokuje wyjście aż do szerokości n znaków, gdzie n jest liczbą całkowitą przechowywaną w argumencie funkcji a poprzedzającym wartość reprezentowaną przez zmodyfikowany Typ.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
 0
Author: jitter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 10:07:26

Specyfikator formatu %4S wyświetla ciąg znaków o szerokości pola 4-to znaczy printf wyświetla wartość z co najmniej 4 pozycjami znaków.

Jeśli wartość wyjściowa wynosi less niż 4 pozycje znaków, wartość domyślna to right justified w polu.

Jeśli wartość greater jest szersza niż 4 pozycje znaków, szerokość pola expands w celu dostosowania odpowiedniej liczby znaków.

Aby uzasadnić wartość, użyj ujemnej liczby całkowitej, aby określić pole szerokość.

Referencje: Java™ How To Program (Early Objects), Tenth Edition

 0
Author: Basheer AL-MOMANI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 11:21:48