Legen Sie die variable Textspaltenbreite in printf fest

Lesezeit: 2 Minuten

Benutzeravatar von Alaa M
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

Benutzeravatar von Oliver Charlesworth
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


Benutzeravatar von jetset
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

1415260cookie-checkLegen Sie die variable Textspaltenbreite in printf fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy