Ausgabe formatieren >iomanip>
-
Hi,
wie kann ich solch eine formatierte Ausgabe hinbekommen?
Buerogebaeude: 64846 Gross-Zimmern Holzstr. 25 10000000 4000000 2000 20 Hotel: 48163 Muenster Untietheide 2 1200000 45000 Landhaus Kahl **** Hotel: 70567 Stuttgart Richterstr. 23 1000000 15000 Hotel Koerschtal ***
Meine Code bis jetzt;
cout <<left<< setw(10)<<"Hotel: "; cout << setw(25)<< get_address(); cout << setw(10)<< (int)get_value(); cout << setw(10) << (int)get_profit(); cout << setw(10)<< name; cout << setw(10) << category <<endl; cout <<left<< setw(10)<<"Buerogebaeude: "; cout << setw(25)<< get_address(); cout << setw(10)<< (int)get_value(); cout << setw(10) << (int)get_profit(); cout << setw(10)<< name; cout << setw(10) << category <<endl;
-
Du kannst mal mit '\t' herumspielen. Auf einigen Konsolen klappt das ganz gut.
Ich glaube, mit setw() wirst Du nicht so glücklich werden...Gruß,
Simon2.
-
Für jeden den es interessiert:
So geht es:
cout << right << setw(15) << "Buerogebaeude: "; cout << left <<setw(35)<< get_address() << right << setw(10) << (int)get_value() << right << setw(10) << (int)get_profit() << right << setw(25) << (int)area << right << setw(10) << (int)price_sm <<endl;
-
Simon2 schrieb:
Du kannst mal mit '\t' herumspielen. Auf einigen Konsolen klappt das ganz gut.
Ich glaube, mit setw() wirst Du nicht so glücklich werden...Gruß,
Simon2.
setw
undleft
/right
sind, im Gegenteil, das einzig Wahre für sowas.\t
ist jede Menge Fummelei und macht ärger, wenn sich Längen ändern.
-
Ein hardcodiertes setw nützt einem da aber auch nicht so viel. Die Streams selbst sind für so etwas natürlich ganz und gar nicht geschaffen, daher sollte man sich eine Ausgabefunktion basteln die mehrere Spalten (mit Beschriftung) schön formatiert generieren und dann in einen Stream schreiben kann.
Im Grunde ist es ja nicht schwer zu realisieren, man berechnet für jede Spalte den längsten Eintrag und berechnet dementsprechend die Positionen der einzelnen Elemente in jeder Zeile. Schwieriger wird es natürlich, wenn man noch die Breite der Konsole beachten will. Wobei ich darauf verzichten würde, wenn diese zu klein ist kann sie der Benutzer vergrößern oder die Ausgabe in eine Datei umleiten und in einem Editor anschauen.Falls jemand von euch vor hat so etwas zu programmieren, dann das Ergebnis bitte hier posten, danke
-
Tippgeber schrieb:
...
Ein hardcodiertes setw nützt schon was. Man muss nur genug Platz für den auszugebenen Text haben. Bei \t passiert es sehr schnell, dass nachfolgender Text zum nächsten Tabstop geschoben wird. Das Problem hat man bei setw nicht.
-
Man muss nur genug Platz für den auszugebenen Text haben.
Genau darum ist hardcodiert blöd. Oder kannst du hellsehen wieviel Platz genug ist?
-
Tyrdal schrieb:
Oder kannst du hellsehen wieviel Platz genug ist?
Sowas ist durchaus möglich. Vielleicht nicht unbedingt hellsehen, aber man kann abschätzen.
Zahlen sind natürlich ganz einfach -> z.B. 32 Bitint
, nicht mehr als 10 Ziffern.
Aber auch Namen von Städten oder Strassen kann man durchaus abschätzen. Einfach genügend gross setzen. Anders wird es im GUI Bereich auch nicht gemacht, da sonst der Text in der Textbox nicht mehr reinpasst, was unschön ist.Alternativ kannst du sogar dein Programm hellsehen lassen, in dem du alle Einträge einer Spalte durchgehst und so die maximal nötige Breite zuerst berechnest.
Am besten machst du ein Tabellenmodell und erstellst entsprechende Views dazu (ConsoleView, HtmlView, usw.). Schön nach dem MVC Prinzip: http://de.wikipedia.org/wiki/MVCGrüssli