Goto umgehen (ohne schleife)
-
Hi, ich habe in dem folgenden Code eine Funktion, welche ein Feld bestehend aus X-Zeichen erstellt. Die Höhe und die breite wird mit ilaenge und ihoehe eingestellt. Jetzt will ich eigentlich nur wissen, wie ich dieses goto wegkriege, da ich bisher keine andere Lösung gefunden habe. Eine for- oder while-schleife dürfte problematisch werden, da in dem besagten Bereich bereits eine ist und die Endungen der Klammern sich gegenseitig schließen(capiche? :D).
void spielfeld(int ilaenge, int ihoehe) { system("cls"); int iposition1,iposition2; iposition2 = 0; mark:; iposition1 = 0; while(iposition1<ilaenge) { printf(" X"); iposition1++; } if(iposition2<ihoehe) { printf("\n\n"); iposition2++; goto mark; } }
Das ich nicht gerade der Experte darin bin, sollte man am Code sehen. Das Problem ist halt einfach, dass mein Lehrer sowas nicht gerne sieht, weil sonst wie er immer so schön sagt ein "Spaghetti-Code" oder so rauskommt
Eine hilfreiche Antwort wäre nett, Danke!
MfG
-
int main(int argc, char *argv[]) { void spielfeld(int,int); int ieingabe; int ibeenden; int ilaenge; int ihoehe; printf("Hauptmenue:"); printf("Waehlen Sie aus, was Sie tun moechten:\n\n"); printf("1 - Neues Spiel \n"); printf("2 - Spiel laden\n"); printf("3 - Beenden\n\n"); printf("Was moechten Sie tun?: "); scanf("%i",&ieingabe); switch(ieingabe) { case 1: printf("Geben Sie die Laenge des Spielfelds ein: "); scanf("%i",&ilaenge); printf("Geben Sie die Hoehe des Spielfelds ein: "); scanf("%i",&ihoehe); spielfeld(ilaenge,ihoehe); break; case 2: printf("Spiel laden."); getch(); break; case 3: printf("Sind Sie sicher, dass Sie das Spiel beenden wollen?\n"); printf("1 - Ja\n"); printf("2 - Nein\n"); scanf("%i",&ibeenden); if(ibeenden==1) { return EXIT_SUCCESS; } if(ibeenden==2) { system("cls"); system("PAUSE"); } } getch(); } void spielfeld(int ilaenge, int ihoehe) { system("cls"); int iposition1,iposition2; iposition2 = 0; mark:; iposition1 = 0; while(iposition1<ilaenge) { printf(" X"); iposition1++; } if(iposition2<ihoehe) { printf("\n\n"); iposition2++; goto mark; } }
Das ist der ganze Code
-
Habe es schon! Danke
-
xkeks93x schrieb:
Habe es schon! Danke
Bitte zeige es, damit schwächere Programmierer bei ähnlichem Problem von Dir lernen können.
-
Eine Schleife ist doch hier kein Problem und sicher eine vernünftige Lösung. Btw, nach Zeilenmarken brauchst du kein Semikolon zu notieren.
-
Eine weitere Schleife um das Hauptmenu ist bei ähnlichen Aufgaben oft auch angesagt.
Dann fehlt bei switch - case noch etwas, damit das besser aussieht.
Spaghetti-Code -> da solltest du den Quellcode noch in mehrere überschaubare Funktionen aufteilen, so das deine main 10 Zeilen oder weniger umfasst. Ich weiss, das lässt sich nicht immer umsetzen, aber oft einfach als man zu Anfang denkt.
MfG f.-th.
-
_matze schrieb:
Btw, nach Zeilenmarken brauchst du kein Semikolon zu notieren.
Eigentlich doch. Wenn man so viel goto benutzt wie ich, gewöhnt man sich das an. Weil es bei Codeumstellungen anderenfalls immer Ärger bereitet, wenn das Sprunziel wiedermal ans Blockende gewandert ist.
-
volkard schrieb:
xkeks93x schrieb:
Habe es schon! Danke
Bitte zeige es, damit schwächere Programmierer bei ähnlichem Problem von Dir lernen können.
void spielfeld(int ilaenge, int ihoehe) { system("cls"); //Clear Screen - Vorbereitung für das Spiel iposition2 = 0; //Spielfelderzeugung beginnt while(iposition2<ihoehe) { iposition1 = 0; while(iposition1<ilaenge) { zufaelligefarbe(); printf(" X"); iposition1++; } printf("\n\n"); iposition2++; } //Spielfelderzeugung beendet }
War eigentlich gar nichts kompliziertes... Habe es nur nich gesehen bzw. war ich warscheinlich dafür einfach nur zu müde.