.| Autor | Beitrag |
|---|---|
|
000 19.11.2001, 23:32 Tomz |
ok, zwei ganz kurze fragen, die mir den umstieg von c auf c++ erleichtern sollen (nur wenn sie beantwortet werden) 1. Wie kann ich in c++ formatieren im stil von zb 2. wie kann ich effizient ein einzelnes ascii zeichen ausgeben? ...denn das atombrot wird nicht ruhen bis es den letzten erwischt hat... |
|
Profil || Suche |
|
001 20.11.2001, 08:10 gerk |
1.ich weiß nicht iwe das mit dme formatiern gaeht, aber afaik geht printf auch unter c++ mit den entsprchenden lib's. --„Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
002 20.11.2001, 08:20 Zeeke |
1. Warum willst du überhaupt cout benutzen? Bleib doch beim guten printf()... 2. cout << (char) 223 << endl; -- |
|
Profil || Suche |
|
003 20.11.2001, 08:38 gerk |
man ich sollte weniger tippfehler machen *grrr* @dr. zeeke: mit () bekommt man man den ascii von 223? --„Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
004 20.11.2001, 11:36 TheTinySteini |
Nein, die Klammern allein machen es nicht, das char dazwischen ist schon wichtig =) TheTinySteini |
|
Profil || Suche |
|
005 20.11.2001, 13:47 Kriz |
zu 1.) Als erstes weiß ich nicht, was %-14 bewirken soll, da der Formatierungstyp fehlt. Ich gehe mal davon aus, daß da ebenfalls i stehen soll (%-14i). Drösel ich mal dein printf() auf: %4i bedeutet also einen Integerwert mit mindestens 4 auszugebenden Zeichen. Ist die Breite des Integerwerts kleiner als 4 Zeichen, werden dementsprechend (4 - Breite) mal Leerzeichen vorangestellt. Das schafft man in C++ so: %-14i bedeutet einen Integerwert linksbündig (-) mit 14 Feldbreiten auszugeben. In C++ geht das so: K:R-I)Z++ Dieser Beitrag wurde am 20.11.2001 um 13:48 von Kriz bearbeitet. |
|
Profil || Suche |
|
006 20.11.2001, 13:49 Zeeke |
Also ich sehe ehrlich gesagt in printf() den kürzeren und komfortableren Weg.. -- |
|
Profil || Suche |
|
007 20.11.2001, 13:52 Kriz |
Da cout zu den Streams gehört (und printf() nicht), ist cout im Nachhinein wesentlich komfortabler als das simple printf()! Das merkt man spätestens bei komplexen I/O-Prozessen... --K:R-I)Z++ |
|
Profil || Suche |
|
008 20.11.2001, 14:55 Tomz |
thnx @ kriz und die anderen. das hab ich gesucht. ich dachte schon, ich müsste bei c bleiben... --...denn das atombrot wird nicht ruhen bis es den letzten erwischt hat... |
|
Profil || Suche |
|
009 20.11.2001, 16:35 Prefect |
Rufe aus der Menge: Beispiel! Beispiel! Beispiel! :P cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
010 20.11.2001, 16:59 Kriz |
Bissu jeck? Ich bastel doch mal hier nicht eben ein komplexes Streamverarbeitungsprogramm :) --K:R-I)Z++ |
|
Profil || Suche |
|
011 20.11.2001, 20:02 gerk |
@ttt: ja das mit dem char war schon klar, ich meinte iegtnlich, ob die klammern das verursachen. „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
012 20.11.2001, 20:31 Zeeke |
Jo klar schonmal von puts gehört, aber afaik kann man doch da einfach nur einfachen Text in den stdout schieben... also noch viel simpler als printf.. eigentlich ist puts fast gar nicht zu gebrauchen würde ich sagen... -- |
|
Profil || Suche |
|
013 20.11.2001, 21:12 Another1 |
klar ist es zu gebrauchen, printf macht es nur evtl ein wenig überflüssig. also: "überflüssig" != unbrauchbar; --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
014 21.11.2001, 10:15 Archangel |
außerdem fügt puts noch ein \n an.. btw: cout sux0rt :p Dieser Beitrag wurde am 21.11.2001 um 10:16 von Archangel bearbeitet. |
|
Profil || Suche |
|
015 21.11.2001, 10:51 Kriz |
Archangel... Archangel... Archangel... Wie? Nix? Ja sowas aber auch... :p --K:R-I)Z++ |
|
Profil || Suche |
|
016 21.11.2001, 12:01 Archangel |
ne, aber wenn du ne eigene funktion schreibst, der eine unbestimmte zahl an argumenten übergeben wird, benutzt du dann in der funktion cout oder vprintf ? :p -- |
|
Profil || Suche |
|
017 21.11.2001, 15:02 Kriz |
vprintf() ist nur ein Hilfsmittel für stdout. Also man kann das auch durchaus mit cout realisieren, wenn man nicht faul ist =) --K:R-I)Z++ |
|
Profil || Suche |
|
018 21.11.2001, 15:30 Archangel |
WENN *g* -- |
|
Profil || Suche |
|
019 22.11.2001, 14:30 Prefect |
Dann müßte man aber das Rad neu erfinden, und genau das will C++ doch eigentlich vermeiden. Oder? Du bist mir übrigens immer noch ein Beispiel schuldig. cout << "Das Objekt ist: " << O; Leider ist dieser Code ziemlich unübersichtlich und sozusagen losgetreten von jeglicher venünftiger Syntax. Das folgende ist ja wohl viel deutlicher: Denn da weiß man, was der Computer eigentlich macht. Das <<-Konstrukt ist was für so Sprachen wie Basic oder Java oder so von mir aus, aber nichts für eine _reine_ Programmiersprache. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
020 22.11.2001, 15:54 Tron |
ich bevorzuge cout und konsorten, da hat man typensicherheit int lala = 0; und schon malt printf die interrupt-vektor-tabelle auf den bildschirm :D --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
021 22.11.2001, 18:34 Kriz |
Prefect, in aller Ehre, aber was du jetzt da von dir gegeben hast, ist irgendwie Schwachsinn! Das Ausgabemakro cout erfüllt viele wichtige Dinge, die C nichtmal im Ansatz richtig beherrscht. Mal davon ausgegangen, daß cout je nach Zuführungsstream den Datentyp korrekt erkennt und absichert, ist die globalisierte Verwendung von I/O-Streams bei allen Kategorien von Streams (File, stdout, stdin usw.) ein mittlerweile unentbehrliches und zeitsparendes Hilfsmittel geworden. Es fördert die Übersichtlichkeit innerhalb von Quelltexten weitaus mehr als printf und seine Derivate! Beispiel? Ok: Nun aber zu dem Problem mit der variablen Parameterliste und cout. Was zum Henker soll daran schwer sein, die va_list direkt in der entsprechenden Funktion/Methode durch cout an stdout ausgeben zu lassen? Ob ich nun die formatierte Ausgabe vprintf() überlasse (und nicht sicher sein kann, ob das auch alles so klappt - hrhr) oder ob ich die Sache via cout und seinen Manipulatoren "manuell" (und sicherer) steuer, ist doch nun wirklich gehüpft wie gesprungen! Tatsache ist, daß C++ diesen Aspekt (nämlich die variable Parameterliste) eben C überläßt und seinen Funktionen. Aber damit erfinde ich das Rad nicht neu, sondern mache das vorhandene Rad eben sicherer und stabiler. Und nun laßt mich bloß in Ruhe mit diesem Müll, es gibt wirklich wichtigere Dinge als sich über die Vorgehensweise bei diesen Dingen zu beschäftigen :p --K:R-I)Z++ |
|
Profil || Suche |
|
022 22.11.2001, 20:08 Archangel |
lol, man kann sich aber auch aufregen.. btw: klar is das unübersichtlich, aber ich sehen von der übersichtlichkeit von: printf("blablabla...hsisdk...ksdksjkd..%d..khgjdfhgj", x); keine größeren Unterschiede zu deinem cout code... aber.. [edit] Dieser Beitrag wurde am 22.11.2001 um 20:08 von Archangel bearbeitet. |
|
Profil || Suche |
|
023 22.11.2001, 23:04 Kriz |
Löl --K:R-I)Z++ |
|
Profil || Suche |
|
024 23.11.2001, 14:29 Prefect |
Hmm.
Die Funktion log() erstellt mir dann eine Zeile in einer Logdatei die in etwa so aussieht: So weit, so gut. Wenn man das ganze jetzt OOP-mässig mit Streams handelt hat man eigentlich 1. Die beste Möglichkeit wäre es, wenn die Streams eine Funktion format() mitbringen würden, mir der sich vprintf()-mässige Ausgaben regeln lassen (haben sie das?). 2. Man könnte den Formatstring eigenhändig parsen und dementsprechend die Argumente nach und nach in <<-Manier an den String übergeben. Allerdings erfindet man das Rad neu (genau das, was OOP ja vermeiden will), oder 3. Man reserviert einen temporären Puffer, in den man per vsnprintf() den Parameter formatiert. Den Puffer übergibt man dann in <<-Manier an den Stream. Die einzige Lösung, die <<-Overloads vernünftig verwendet ist #3. Leider hat diese Lösung einen Bug: Wenn die Zeile zu lang wird, gehen Zeichen am Ende verloren. Natürlich könnte man das Problem nun aber auch anders gehen. Denkbar wäre vielleicht ein Design a la: main_log << LOG_WARN << "Blablah: " << string << end_of_log_line; Die Frage ist, was für einen Typ hat main_log? Es wäre für mich nur sehr schwer möglich, main_log eine Ableitung einer Streamsklasse zu machen. Das liegt an mehreren Dingen, unter anderem: Unter diesen Voraussetzungen hat eine solche <<-Implementierung folgende Nachteile: Ich darf dich darauf hinweisen, daß dieses Beispiel ja wohl alles andere als an den Haaren herbei gezogen wurde, während dein Chaosstring von oben doch als ein sehr seltsames Beispiel anmutet. Übrigens habe ich generell nichts gegen Operator-Overloads wenn ich denn mal C++ programmiere, aber ich bin nunmal der Ansicht, daß << bitte ein Shift-Left-Operator bleiben sollte. Ein Argument für die <<-Methode ist übrigens, daß sie ein kleines Bißchen schneller ist als printf() (zumindest wenn sie ordentlich implementiert wurde). Dafür erzeugt sie aber auch einen sehr viel größeren Code als ein Aufruf von printf(). cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |

