Wie Strings zu formatieren printf () verwenden, um die gleiche Länge in der Ausgabe zu erhalten?

StackOverflow https://stackoverflow.com/questions/1809399

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe zwei Funktionen, eine, die Nachrichten wie Starting initialization... und andere erzeugt, die Rückgabecodes und Ausgänge "Ok", "Warning" oder "Error" prüft. der Ausgang Das ist jedoch die unterschiedlichen Länge erzeugt wird:

Starting initialization...Ok.
Checking init scripts...Ok.

Wie kann ich so etwas wie diese:

Starting initialization...       Ok.
Checking init scripts...         Ok.
War es hilfreich?

Lösung

Sie können auf String-Felder angeben Breite, z.B.

printf("%-20s", "initialization...");

und dann alles, was mit diesem Bereich gedruckt ist wird auf die Breite Sie Leerzeichen aufgefüllt sein angeben.

Die - linksrechtfertigt Ihren Text in diesem Bereich.

Andere Tipps

printf ermöglicht mit einer Breite Bezeich Formatierung. z.


printf( "%-30s %s\n", "Starting initialization...", "Ok." );

Sie würden einen negativen Breitenbezeichner verwenden, um links Begründung angeben, da die Standardrechtsbündig zu verwenden ist.

Wenn Sie darüber hinaus die Flexibilität der Wahl der width wollen, können Sie zwischen einem der beiden folgenden Formate (mit oder ohne Abschneiden) wählen:

int width = 30;
//no truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization...     Ok."

//truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." ); 
// output is "Starting initialization... Ok."

Es gibt auch den %n Modifikator, der unter bestimmten Umständen helfen kann. Es gibt die Spalte, in der die Saite so weit war. Beispiel: Sie möchten mehrere Zeilen schreiben, wie eine Tabelle innerhalb der Breite der ersten Reihe sind

.
int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);

for(i=0; i<6; i++)
   printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);

wird zwei Spalten mit derselben Breite von drucken, was auch immer Länge der beiden Strings header1 und header2 haben. Ich weiß nicht, ob alle Implementierungen der %n haben aber Solaris und Linux zu tun.

Es gibt auch die eher Low-Tech-Lösung des Zählen Hinzufügen von Räumen mit der Hand, um Ihre Nachrichten zu machen in einer Reihe aufstellen. Nichts hindert Sie daran, ein paar nachgestellten Leerzeichen in Ihrer Nachricht Strings enthält.

Starten Sie mit der Verwendung von Tabs, die \ t Charakter Modifikator. Es wird vorrücken zu einem festen Standort (Spalt, Terminal Lingo). Allerdings hilft es nicht, wenn es Unterschiede von mehr als die Spaltenbreite (4 Zeichen, wenn ich mich richtig erinnere).

Um das zu beheben, schreiben Sie Ihren "OK / NOK" Stoff mit fester Anzahl von Tabs (5? 6 ?, versucht es), dann zurück ( \ r ) ohne neues Futter und schreiben Ihre Nachricht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top