4. while-Schleife zur Formatierung
FormatierungSpalten.cpp
// Programm zur Formatierung in Spalten

# include <iostream>
# include <string>


using namespace std;

int main()
{
int z=1;
int b=1;
int anzahl;
int spalten;
string eingabe;
char jnabfrage;

// Eingabe der Daten

cout << "Bitte geben sie einen String ein: ";
cin >> eingabe;
cout << "Bitte geben sie die Anzahl an Strings an: ";
cin >> anzahl;
cout << "Bitte geben sie die Anzahl der Spalten ein: ";
cin >> spalten;
cout << "Sollen die verbleibenden Spalten aufgefüllt werden? ";
cin >> jnabfrage;

// Schleife zur Erzeugung

while(z<=anzahl)
{
cout << eingabe << "\t";
z++;
b++;
if(b>spalten)
{
cout << endl;
b=1;
}
}

// Auffüllen der Spalten

if(jnabfrage=='j')
{
while(b!=1 && b<(spalten+1))
{
cout << "0000" << "\t";
b++;
}
}
cout << endl;

return(0);
}

Die Daten im Detail:

cout << "Bitte geben sie einen String ein: ";
cin >> eingabe;
cout << "Bitte geben sie die Anzahl an Strings an: ";
cin >> anzahl;
cout << "Bitte geben sie die Anzahl der Spalten ein: ";
cin >> spalten;
cout << "Sollen die verbleibenden Spalten aufgefüllt werden? ";
cin >> jnabfrage;

Ist klar: Hier werden die erforderlichen Daten eingegeben. Das Programm soll später den eingegebenen String durch einen Tabulator getrennt solange nebeneinander schreiben, bis die Anzahl der Spalten erreicht ist. Nach dem erreichen der maximalen Spaltenzahl, wird in die nächste Zeile gerutscht und weiter gemacht. Solange bis die Anzahl der Strings abgearbeitet ist. Ist die Spalten-Auffüll-Frage mit ja beantwortet, sollen noch 4 Nullen als Ersatz für den String die letzte Zeile gänzlich auffüllen, so fern dies benötigt wird. Ein Beispiel: Haben wir als Anzahl 10 Strings und 5 Spalten paßt das Ganze sauber in 2 Zeilen, also muß nicht mit Nullen aufgefüllt werden. Bei Anzahl 8 Strings und 5 Spalten fehlen 2 Strings um die letzte Zeile zu komplettieren, also muß noch 2 Strings Nullen aufgefüllt werden.

while(z<=anzahl)
{
cout << eingabe << "\t";
z++;
b++;
if(b>spalten)
{
cout << endl;
b=1;
}
}
Der Kern des Programms, die while-Schleife. Es gibt zwei Zähler, z und b, die beide bei 1 beginnen. Sozusagen z gleich dem ersten String, also stellvertretend für die Anzahl und b gleich der ersten Spalte. Die while-Schleife besagt nun, führe die Befehle innerhalb der Schleife solange aus wie z kleiner oder gleich der Anzahl ist (also bis die Anzahl abgearbeitet ist). Dabei wird mit cout der String ausgegeben und mittels "\t" ein Tabulator-Vorschub eingeleitet. Danach werden die Zähler z und b um eins erhöht (++). Die if-Abfrage besagt, wenn b größer als die Anzahl der Spalten, also die erforderlichen Spalten aufgefüllt sind, soll mit cout << endl ein Zeilenvorschub eingeleitet werden und b (da wieder bei Spalte 1) auf 1 gesetzt werden. So werden die Strings schön Reihe für Reihe nebeneinander geschrieben.
if(jnabfrage=='j')
{
while(b!=1 && b<(spalten+1))
{
cout << "0000" << "\t";
b++;
}
}

Die if-Verzweigung, falls die Auffüll-Frage mit "j" für ja beantwortet wurde. Falls j angegeben wurde wird eine while-Schleife ausgeführt die solange abläuft wie b nicht 1 ist und gleichzeitig b kleiner als die Anzahl der Spalten plus 1. Wir erinnern uns an die vorhergende Schleife, welche besagt, wenn die Spalten voll sind, wird b auf 1 gesetzt, was bedeutet, wenn die Reihen aufgehen hat b den Wert 1 und es muß nicht mehr aufgefüllt werden. Daher soll die while Schleife nur dann ausgeführt werden, wenn die Reihen nicht aufgehen, also aufgefüllt werden müssen, also b nicht den Wert 1 hat und gleichzeitig die erforderliche Spaltenanzahl noch nicht erreicht ist (b<(spalten+1)). Also werden bis zum erreichen der letzten Spalte 4 Nullen pro Tabulator geschrieben.

cout << endl;

Am Ende wird noch ein Zeilenvorschub geschrieben um das Programmende ein wenig abzugrenzen. Eigentlich handelt es sich hier um ein total simples Programm, welches in ähnlicher Form in meinem Programm bildershow zum Einsatz kam, damit in der thumbnail-Ansicht die mini-Bilder über eine definierte Anzahl von Spalten in die HTML-Seite gesetzt werden. Irgendwie stand ich allerdings auf dem Schlauch und hab den Wald vor lauter Bäumen nicht gesehen. So hat mir diese kleine Ecke im Programm Anfangs ganz schönes Kopfzerbrechen bereitet. Oder denkt man manchmal einfach zu kompliziert? Wer weiß....

Index