Endlosschleife --> was sagt ihr (Mein Informatiklehrer sagt wieder, dass...)
-
schade das ich mich ins c++ forum verirrt habe, sonst könnt ich sagen, for(int x... gibts in c89 nicht :p
guten morgen && lg lolo
-
aber da ist das break oder die flag auch nciht unbedingt notwendig:
template <typename T> T get(std::istream &in, std::ostream &out) { T ret_val; while (! (in >> ret_val) ) { out << "falsch usw."; clear_stream(in); }; clear_stream(in); return ret_val; } template <typename T> T get(std::istream &in, std::ostream &out, const T& lower_bound, const T& upper_bound) { T ret_val = get<T>(in, out); while( (ret_val < lower_bound) || (ret_val > upper_bound) ) { out << "außerhalb der grenzen..."; clear_stream(in); ret_val = get<T>(in, out); }; return ret_val; }und die eine zeile, die ich da doppelt drin habe, kann man imho so und so nur mit verrenkungen vermeiden...
bb
-
kpl. od das jetzt an den templates liegt aber so mit einem blick check ich nicht was du da machst

lg lolo
-
Dann verteufelt er vermutlich auch continue in Schleifen...
-
Hallo,
ich meite eigentlich sowas wie Bashar es in seimem zweiten Beispiel hat. Vielleicht war meine Ausdrucksweise falsch. Strenggenommen ist es keine Endlosschleife...naja, ihr habt mich dennoch verstanden!Kann man sagen, dass eigntlich alle Schlüsselwörter aus C++ zu nutzen sind? Andernfalls könnte man argumentieren, dass es solche sonst ja nicht geben würde. Naja, trotzdem gibt es ja immer wieder "Stilverbesserungen". Heute würde ja auch keiner mehr das schreiben:
void main() { cout << "Hello World" << endl; }lg, freakC++
-
freakC++ schrieb:
Naja, trotzdem gibt es ja immer wieder "Stilverbesserungen". Heute würde ja auch keiner mehr das schreiben:
void main() { cout << "Hello World" << endl; }Das liegt aber nicht daran dass es als nicht schön erachtet wird!
g++ main.cpp -o main main.cpp:4: Fehler: »::main« muss »int« zurückgebenDas ist also einfach nur verboten! Also nix Geschmackssache oder Stilverbesserung.
-
Mmmhh...da haste recht, aber die Nutzung von break, continue wird mir genauso als verboten dargestellt. Einmal sagt es der Compiler...einmal der Lehrer

lg, freakC++
-
Ich verwende immer break & continue wenn es Sinn macht. So einfach ist das.
Die Verwendung von irgendwelchen Abbruchvariablen die in langen Schleifen verwendet werden, führen meist zu viel unübersichtlicheren Verschachtelungen.Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
-
freakC++ schrieb:
Einmal sagt es der Compiler...
Wenn du mit Compiler den Typen meinst, dem du deinen Quelltext zum Übersetzen gibst, würde ich mir einen anderen suchen. Der soll keinen Kommentar abgeben sondern seine Arbeit erledigen.
Wenn du selber ein soclhes Programm bedienst (z.B. GCC), dann handelt es sich wohl um eine falsche Anwendung, sprich einen tatsächlichen Programmierfehler.
Auf nicht initialisierte Pointer zugreifen ist ja auch böse böse böse, nur - der Compiler meldet das nicht!
-
Ok, ich konnte mir durch eure Antworten und Meinungen ein gutes Meinungsbild verschaffen. Ich werde auch weiterhin mit break etc. arbeiten und vielleicht in der Arbeit mal auf andere Strukturen zurückgreifen.
Ich danke euch allen.
lg, freakC++
-
Fellhuhn schrieb:
Ich verwende immer break & continue wenn es Sinn macht. So einfach ist das.
Die Verwendung von irgendwelchen Abbruchvariablen die in langen Schleifen verwendet werden, führen meist zu viel unübersichtlicheren Verschachtelungen.Dito.
Ich verwende break & continue zwar selten, aber durchaus wenn es der Übersichtlichkeit förderlich ist.
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Es sei den man setzt ohnehin weitgehend auf Stackvariablen in Schleifen, oder RAII-Mechanismen.
-
freakC++ schrieb:
Kann man sagen, dass eigntlich alle Schlüsselwörter aus C++ zu nutzen sind? Andernfalls könnte man argumentieren, dass es solche sonst ja nicht geben würde.
Nein, so kann man nicht argumentieren. Es gibt z.B. das Schlüsselwort
auto, das völlig überflüssig ist (und in C++0x umgewidmet wird, weil es nie jemand benutzt). Auch von zweifelhaftem Wert istregister. Und in portablen Programmen kann nie das Schlüsselwortasmvorkommen.
Die Funktionensetjmp/longjmpsollte man auch nicht verwenden. Na und so weiter ... die Sprache enthält vieles nur aus historischen Gründen, sie macht auf keinen Fall Stilvorgaben.
-
Stimmt, da haste recht. Bei register ist ja sowieso dem Compiler überlassen, was er damit anstellt.
lg, freakC++
-
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Sowas löst man ja auch über RAII
-
hustbaer schrieb:
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Sowas löst man ja auch über RAII
Wenn man schon über Sinn und Unsinn von Keywords etc redet, dann löst "man" das nicht mit RAII.

-
Sehr passend zu diesem Thread, das heutige DailyWTF:
for (int i = 0; i < dtModules.Rows.Count; i++) { if (dtModules.Rows[i]["id"].ToString() == ID.ToString()) { dtModules.Rows.RemoveAt(i); i = 34598; //used to jump out of the for } }
-
Fellhuhn schrieb:
hustbaer schrieb:
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Sowas löst man ja auch über RAII
Wenn man schon über Sinn und Unsinn von Keywords etc redet, dann löst "man" das nicht mit RAII.

Ich steh grad völlig auf dem Schlauch. Kannst du mir das erklären?
Meinst du "man" wie in "man man" oder "man 3 printf"?
Und wenn ja, wo siehst du da jetzt die Verbindung? Und was hat das ganze mit Keywords zu tun?
-
Damit wollte ich sagen (und habe ich auch :p) das wenn man schon nichts mit den Keywords anzufangen weiß man auch keine Ahnung hat was RAII ist.
-
freakC++ schrieb:
Er sagte, man solle das mit einer Endlosschleife lösen, bei der beispielsweise eine bool Variable den anderen Wert annimmt, sobald ich "break" setzen würde. Dann wäre die Schleife auch sofort beendet.
Ist in C++ Quatsch.
Es war damals sinnvoll, als die "strukturierte Programmierung" so furchtbar modern war. Es geht nämlich darum, daß man open/close-Paare nicht trennt.for(...){ int file=open(...); bla(file); foo(file); int y=findFirstShit(file); if(y==0) break; int z=findNextShit(file,y); print(z); close(file); }Naja, davor hat man halt Angst.
Nicht, daß sowas noch vorkommen würde, aber das ist eine andere Geschichte.
Also machten wir es so:bool nochDrin=true; for(nochdrin && ...){ int file=open(...); bla(file); foo(file); int y=findFirstShit(file); if(y==0) nochDrin=false; else{ int z=findNextShit(file,y); print(z); } close(file);//wichtig! }Helau!
Ja, wenn man das konsequent so macht, trennt man nie wieder open/close-Paare. Um das noch machen zu müssen, muß man aber erstens einen Prozessor und COmpiler haben, wo Funktionsaufrufe teuer sind und man Innereien nicht Auslagern mag, und zweitens kein C++ haben, wo es taugliche Destruktoren gibt.for(...){ ifstream file(...); bla(file); foo(file); int y=findFirstShit(file); if(y==0) break;//führt close aus int z=findNextShit(file,y); print(z); //close(file);//auch close automatisch }Es ist so, daß der neuere Stil, jederzeit rauszugehen, und zwar so hart wie möglich (also return meistens noch viel besser als break), am Ende die Übersicht erhöht und Fehler vermeidet.
Der Stil des Lehrers gehört in die 70-er und frühen 80-er Jahre.
Aber egal, mach's in der Schule so, wie er will und zock die gute Note ab. Daheim mach's halt richtig. RAII gehört zu C++ und ist ein dicker Brocken in Sachen, was wann wo guter C++-Stil ist.
-
Hallo,
danke für nocheine ausführliche Antwort:Aber egal, mach's in der Schule so, wie er will und zock die gute Note ab. Daheim mach's halt richtig.
hahaha...das ist gut!
Werd ich machen!lg, freakC++