Bitte um Änderungsvorschläge bei Schleifen
-
Hallo zusammen,
ich soll ein Programm erstellen, dass die Zahlen von 1 bis 10 ausgibt.
Einmal mit for, einmal mit while und einmal mit do...whileIch habe das so gelöst (das int i = 0 muss dort stehen, ist schon vorgegeben)
#include <cstdlib> #include <iostream> using namespace std; int main () { int i = 0; for (i = 1; i<11; i++) { cout <<"Schleif" <<i <<endl; } i = 1; while (i < 11) { cout << "Scheiffffee" <<i<<endl; i++; } i = 1; do { cout <<"Schliffeeeeeeeeeeeeeeee" <<i <<endl; i++; } while (i < 11); system("pause");}
Gibt es da eine elegantere Möglichkeit als dass ich immer wieder bei i den Wert 1 setzen muss?
Danke!
Gruß
-
MarkO122 schrieb:
Gibt es da eine elegantere Möglichkeit als dass ich immer wieder bei i den Wert 1 setzen muss?
Ist doch gut so. Minimal eleganter: Immer neue Variablen verwenden und den Scope der Variablen auf die Schleifen beschränken.
-
int i = 1; for(; i <= 10; ++i) std::cout << i << std::endl; i = 1; while(i <= 10) std::cout << i++ << std::endl; i = 1; do std::cout << i++ << std::endl; while(i <= 10);
Naja, nicht viel besser.
-
hm - 31415
Was soll daran besser sein? Ich seh nur Endlosschleifen
Nachtrag: Ah - wurde korrigiertNachtrag2: do-while ist falsch, da 11 auch ausgegeben wird.
-
Wo sind denn da bitte Endlosschleifen? Siehe Postfix/Prefix.
-
Peinlich
Naja, verwende do-while so gut wie nie.
-
Danggge!!
Noch ne Frage zur Überladung:
Ich hab folgendes gelesen:
Wir verstehen darunter die Definition mehrerer gleichnamiger Methoden, die sich
in ihrer Übergabe-Parameterliste und/oder ihrem Rückgabewert unterscheiden.wenn ich jetzt allerdings
void werteausgeben(int)
und
int werteausgeben(int)
betrachte, wie kann ich die denn dann beim Methodenaufruf unterscheiden?
Bei der Paramterliste ist das ja klar, ich kann ja unterscheiden ob (int) oder (int,int) aber bei dem Rückgabewerten?
Danke!Viele Grüße
-
Gar nicht. Beide haben die gleiche Signatur (die beinhaltet nämlich nicht den Rückgabetyp) -> Compilerfehler.
-
Überladene Methoden haben immer unterschiedliche Parameter, die Rückgabetypen sind "egal".
-
Besser gesagt: Funktionen werden nicht anhand ihres Rückgabetyps oder Namens differenziert, sondern an ihren Parametern. Wenn du die selbe Funktion mit verschiedenen Rückgabetypen hast, dann weiß der Compiler nicht, wann er welche benutzen soll (genauso wenig wie du :D) und gibt eine Fehlermeldung.
Also ist das hier eine Funktionsüberladung
void print(int);
void print(int, char);, aber das hier nicht:
void print(int);
char print(int);letzteres ist wie beschrieben schlicht falsch.
-
Besser gesagt: Funktionen werden NICHT anhand ihres Rückgabetyps erkannt, SONDERN an ihren Parametern. Wenn du die selbe Funktion mit verschiedenen Rückgabetypen hast, dann weiß der Compiler nicht, wann er welche benutzen soll (genauso wenig wie du :D) und gibt eine Fehlermeldung.
Also ist das hier eine Funktionsüberladung
void print(int);
void print(int, char);, aber das hier nicht:
void print(int);
char print(int);letzteres ist wie beschrieben schlicht falsch.
... Meintest du (Incocnito) natürlich
-
Scheiße.
Sowas ist jetzt peinlich
Habs verbessert, ja meinte ich natürlich. Oh mann..
-
Incocnito schrieb:
Scheiße.
Sowas ist jetzt peinlich
Habs verbessert, ja meinte ich natürlich. Oh mann..xD Jetzt hast du es aber noch immer nicht ganz korrekt.
Also nochmal:
- Der Compiler erkennt eine Funktion an ihrer Signatur.
- Zur Signatur einer Funktion gehört der Name und die Parameterliste.Problem:
- Wenn du nun 2 Funktionen mit gleicher Signatur hast, hast du natürlich ein Konflikt.Gruß
-
Danke!
Toll, dann hab ich mich (mal wieder) falsch informiert. :-((
Danke für die Auflärung