Ausgerichtete Spalten
Wenn du eine Tabelle ausgibst, etwa einen Kassenbon oder eine Rangliste, sollen die Spalten untereinander stehen. Normalerweise ist aber jede Zeile nur so lang wie ihr Text, und die Zahlen landen irgendwo:
printf("%s %.2f\n", "Brot", 2.5);
printf("%s %.2f\n", "Schokolade", 3.75);Das gibt Folgendes aus:
Brot 2.50
Schokolade 3.75Eine Zahl zwischen dem % und dem Buchstaben eines Formatbezeichners legt die Breite fest: wie viele Zeichen der Wert mindestens belegt. Ein kürzerer Wert wird mit Leerzeichen aufgefüllt. %10s setzt die Leerzeichen links, richtet den Text also rechtsbündig aus. Mit einem Minus, %-10s, stehen die Leerzeichen rechts, und der Text ist linksbündig, was du bei Namen meistens willst. Auch Zahlen haben Breiten. Die eckigen Klammern in diesem Beispiel zeigen, wo jeder Wert beginnt und endet:
printf("[%5d]\n", 42);
printf("[%-5d]\n", 42);
printf("[%10s]\n", "Anna");
printf("[%-10s]\n", "Anna");
printf("[%6.2f]\n", 3.14159);Das gibt Folgendes aus:
[ 42]
[42 ]
[ Anna]
[Anna ]
[ 3.14]In %6.2f ist 6 die gesamte Breite, der Dezimalpunkt eingeschlossen, und 2 ist die Anzahl der Nachkommastellen. Ein Kassenbon mit Breiten sieht so aus:
printf("%-10s %6.2f\n", "Brot", 2.5);
printf("%-10s %6.2f\n", "Schokolade", 3.75);Das gibt Folgendes aus:
Brot 2.50
Schokolade 3.75Ein längerer Wert wird nicht abgeschnitten: %3s gibt "Alexander" ganz aus, nur die Ausrichtung geht kaputt. Wähle die Breite also nach dem längsten Wert der Spalte. Und Vorsicht bei Umlauten: Die Breite zählt char, eine Zeile mit "Käse" wäre also um eine Stelle verschoben. Deshalb haben die Namen in dieser Übung keine Umlaute.
In der Übung stehen die Namen der Waren in einem Array aus Zeichenketten. Das ist ein zweidimensionales Array aus Zeichen, das du aus der Lektion über Arrays kennst: char waren[4][12] hat 4 Zeilen, und jede Zeile ist eine Zeichenkette mit Platz für 11 Zeichen und das '\0'. waren[1] ist die ganze zweite Zeichenkette, du gibst sie also mit %s aus:
char waren[4][12] = {"Brot", "Milch", "Schokolade", "Tee"};
printf("%s\n", waren[1]);Das gibt Folgendes aus:
MilchSo schreibst du es:
Anweisungen
- 1
Ändere den Formatstring in der Schleife: Richte die Namen linksbündig in einer Spalte von 10 Zeichen Breite aus,
%-10s, und die Preise rechtsbündig in einer Spalte von 6 Zeichen Breite mit 2 Nachkommastellen,%6.2f. Lass zwischen den Spalten ein Leerzeichen. Die Ausgabe sieht dann so aus:Brot 2.50 Milch 1.20 Schokolade 3.75 Tee 4.10 - 2
Gib unter der Schleife eine Zeile mit der Summe aus: den Text
Summein einer Spalte so breit wie die Namen und die Summe der Preise in einer Spalte so breit wie die Preise. Addiere die Preise in der Schleife. Die Zeile sieht so aus:Summe 11.55