Legen Sie die variable Textspaltenbreite in printf fest
Lesezeit: 2 Minuten
Alaa M.
Um die Größe der Spalte in C-Sprache zu bestimmen, verwenden wir %<number>d. Ich kann zum Beispiel tippen %3d und es wird mir eine Spalte mit Breite = 3 geben. Mein Problem ist, dass meine Nummer nach der % ist eine Variable, die ich erhalte, also brauche ich so etwas wie %xd (wo x ist die Integer-Variable, die ich irgendwann zuvor in meinem Programm erhalten habe). Aber es funktioniert nicht.
Gibt es eine andere Möglichkeit, dies zu tun?
Im Allgemeinen sollten Sie anstelle von “funktioniert nicht” die genaue Fehlermeldung, die Sie erhalten haben, kopieren und einfügen.
– Luser Drog
19. August 2011 um 4:29 Uhr
@luserdroog Es gibt keine Fehlermeldung wenn printf scheitert. Es gibt nur stillschweigend eine falsche Ausgabe.
– SS Anne
1. September 2019 um 23:18 Uhr
Bezieht sich das auf die acht Jahre alte Frage? Und welche Ausgabe erhalten Sie und was erwarten Sie? Wie sieht der Aufruf aus?
– Luser Drog
2. September 2019 um 8:31 Uhr
Oliver Charlesworth
Sie können dies wie folgt tun:
printf("%*d", width, value);
Aus Lees Kommentar:
Sie können auch ein * für die Genauigkeit verwenden:
printf("%*.*f", width, precision, value);
Beachten Sie, dass beides width und precision Typ muss sein int wie erwartet von printf für die * Argumente, Typ size_t ist unangemessen, da es auf der Zielplattform eine andere Größe und Darstellung haben kann.
@SouravKannanthaB: Nein, das funktioniert nicht scanf: das * meint Zuordnung unterdrücken und für diese Konvertierungsspezifikation wird kein Zeigerargument bereitgestellt. Es gibt keine Möglichkeit, die Zahl als Argument anzugeben, aber Sie können mit eine Formatzeichenfolge zusammensetzen snprintf als Workaround. scanf_s aus dem optionalen und umstrittenen Anhang K versuchte, verwandte Probleme anzugehen, aber die Spezifikation ist für eine einfache Verwendung unzureichend.
– chqrlie
15. März 2021 um 9:39 Uhr
Jetset
Nur der Vollständigkeit halber wollte ich das mit POSIX-kompatiblen Versionen von erwähnen printf() Sie können den Wert der tatsächlichen Feldbreite (oder Genauigkeit) auch an einer anderen Stelle in der Parameterliste eingeben und mit der auf 1 basierenden Parameternummer, gefolgt von einem Dollarzeichen, darauf verweisen:
Eine Feldbreite oder -genauigkeit oder beides kann durch ein Sternchen „∗“ oder ein Sternchen gefolgt von einer oder mehreren Dezimalziffern und einem „$“ anstelle einer Ziffernfolge angegeben werden. In diesem Fall liefert ein int-Argument die Feldbreite oder Genauigkeit. Eine negative Feldbreite wird als linkes Anpassungsflag behandelt, gefolgt von einer positiven Feldbreite; eine negative Genauigkeit wird behandelt, als würde sie fehlen. Wenn eine einzelne Formatdirektive positionelle (nn$) und nicht-positionale Argumente mischt, sind die Ergebnisse undefiniert.
Z.B, printf ( "%1$*d", width, value );
Dein Beispiel passt nicht zur Sprache. Es sollte sein "%*1$d"
– Jim Balter
2. März 2014 um 20:18 Uhr
Außerdem sollten Sie beide Argumente mittels spezifizieren n$so: printf("%2$*1$d", width, value);.
– Stefan van den Akker
7. August 2014 um 11:26 Uhr
14152600cookie-checkLegen Sie die variable Textspaltenbreite in printf festyes
Im Allgemeinen sollten Sie anstelle von “funktioniert nicht” die genaue Fehlermeldung, die Sie erhalten haben, kopieren und einfügen.
– Luser Drog
19. August 2011 um 4:29 Uhr
@luserdroog Es gibt keine Fehlermeldung wenn
printf
scheitert. Es gibt nur stillschweigend eine falsche Ausgabe.– SS Anne
1. September 2019 um 23:18 Uhr
Bezieht sich das auf die acht Jahre alte Frage? Und welche Ausgabe erhalten Sie und was erwarten Sie? Wie sieht der Aufruf aus?
– Luser Drog
2. September 2019 um 8:31 Uhr