2016-09-11 3 views
-1

Ich versuche, eine grafische Tabelle in C zu erstellen, indem ich ein 2D-int-Array verwende. Alles funktioniert gut, aber das Problem ist, dass die Tabelle nicht mehr gut aussieht, wenn die Länge der Ganzzahl unterschiedlich ist. Hier ein Beispiel:Variable Länge von Spalten in C

Gut

[ 198 ] [ 2 ] [34313] 
[ 4 ] [ 54 ] [ 6 ] 
[ 7 ] [ 888 ] [ 9 ] 

Nicht gut

[198] [2] [34313] 
[4] [54] [6] 
[7] [888] [9] 

Was ich komme mit war die Länge der größten int zu bekommen und dann %-Xd verwendet für Abstand, aber ich don‘ Ich weiß, wie man eine Variable an der Stelle des X benutzt. Mein Gedanke war, X durch %d zu ersetzen, also printf(" [%-%dd]", maxLength, mat[i][j]);, aber alles, was ich bekomme, ist [% dd].

Kennt jemand eine Möglichkeit, dieses Problem zu lösen?

+1

Was in der man-Seite für 'printf' hast du nicht verstanden? Wie wäre es mit einer einfachen Suche nach 'c printf'? – Olaf

+2

[Eine gute 'printf' Referenz] (http://en.cppreference.com/w/c/io/fprintf) könnte sich als nützlich erweisen. –

+0

http://stackoverflow.com/questions/153890/printing-leading-0s-in-c – OldProgrammer

Antwort

1

Es gibt zwei Hauptoptionen:

  1. Erstellen Sie das Format-String zur Laufzeit mit dem richtigen Wert für X in der Zeichenfolge:

    char format[8]; 
    snprintf(format, sizeof(format), "%%%dd", width); 
    printf(format, matrix[row][col]); 
    
  2. Lesen Sie die printf() Dokumentation und verwenden * in der Formatzeichenfolge, um anzuzeigen, dass die Breite von einem Wert gelesen werden soll:

    printf("%*d", width, matrix[row][col]); 
    

Beide rechtsbündig die Zahl in einer minimalen Breite. Wenn der Wert zu groß für die Anpassung ist, wird er trotzdem gedruckt, wobei gegebenenfalls zusätzlicher Platz benötigt wird.

Wenn Sie eine Nullauffüllung wünschen, können Sie entweder eine 0 zum Format hinzufügen (%05d) oder eine Genauigkeit (%.5d) verwenden oder %.*d verwenden. Sie können Zeichen mit + erzwingen; Sie können mit -, etc.

note Hinweis, dass negative Zahlen bei der Ermittlung der maximalen Breite einen zusätzlichen Platz für das Minuszeichen benötigen, und Sie müssen sowohl den Mindest- als auch den Höchstwert analysieren genug Platz. Wenn die maximale Anzahl 9 und das Minimum -100.000 ist, wird die maximale Anzahl zur Bestimmung der Breite nicht gut funktionieren. Wenn Ihre Werte nicht negativ sind, ist dies kein Problem.

+0

Eigentlich endete ich mit "% * d", danke! – Adrian