Zur Funktion zurückkehren
-
Nein, meinte ich nicht

Hat sich aber erledigt.
Ich wollte notfalls von einer aufgerufenen Funktion zu der aufrufenden zurückkehren, aber das hab ich gelöst, indem ich z.b.in der main() Funktion "ausrechen();" ausführe und in der ausrechnen() wieder auf main() will (noch nicht am Ende der Funktion) musste ich main(); reinschreiben, jedoch void main(); über die Funktion setzen.
Das war mein eigentliches Problem.
Gruß,
Shadowhand
-
Shadowhand schrieb:
das hab ich gelöst, indem ich z.b.
in der main() Funktion "ausrechen();" ausführe und in der ausrechnen() wieder auf main() will (noch nicht am Ende der Funktion) musste ich main(); reinschreiben, jedoch void main(); über die Funktion setzen.
Das ist keine Lösung, sondern Mist.
-
Mag sein, aber es ist ausreichend für die Aufgabe, welche mir gestellt wurde.
Gruß,
Shadowhand
-
Shadowhand schrieb:
Mag sein, aber es ist ausreichend für die Aufgabe, welche mir gestellt wurde.
Deshalb ist "ausreichend" im deutschen Notensystem auch in der unteren Hälfte angesiedelt :p
Im Ernst: Es ist falsch (auch wenn Dein Compiler es schlucken mag).
-
Shadowhand schrieb:
Mag sein, aber es ist ausreichend für die Aufgabe, welche mir gestellt wurde.
Gruß,
ShadowhandSchau Dir mal Schleifen an ! (z.B. while() )
Ich habe den Eindruck, daß es das ist, was Du suchst.
Ich habe es mal eingeflickt in Deinen Code;[b]bool[/b] fragen() { int antwortUser, richtigeAntwort, zufall1, zufall2, zufall3, zufall4; string antwortMoeglichkeit[10][4]; // Ich gehe mal davon aus, daß Du "richtigeAntwort" und die "zufall"-Vars // setzt, es aber hier weggelassen hast // ======== Frage 1 ======== antwortMoeglichkeit[0][0]="16"; antwortMoeglichkeit[0][1]="14"; antwortMoeglichkeit[0][2]="17"; antwortMoeglichkeit[0][3]="15"; cout<<"Frage 1: Wieviele Bundeslaender hat Deutschland?"<<endl; cout<<"________________________________________________________________________\n"; cout<<endl; cout<<"----------> Antwort 1: "<<antwortMoeglichkeit[0][zufall1]<<" <------> Antwort 2: "<<antwortMoeglichkeit[0][zufall2]<<" <----------"; cout<<endl<<endl; cout<<"----------> Antowrt 3: "<<antwortMoeglichkeit[0][zufall3]<<" <------> Antwort 4: "<<antwortMoeglichkeit[0][zufall4]<<" <----------"; cout<<endl; cout<<"________________________________________________________________________\n"; cout<<endl; cout<<"Ihre Antwort: "; cin>>antwortUser; if ((antwortUser - 1)!=richtigeAntwort) { [b]return true;[/b] } [b]return false;[/b] } void main() { [b]int fragenRichtig;[/b] // Eigentlich willst Du ja außerhalb von fragen() // wissen, wie viele Fragen insgesamt schon richtig beantwortet sind header(); [b]while(!fragen()) [/b] { // ruft solange fragen() auf, bis das true zurückliefert // Hier kannst Du bei jedem Fehlerversuch noch was machen, wenn Du willst } ++fragenRichtig; // schöner als "fragenRichtig=fragenRichtig + 1;" }(Natürlich kannst Du die whileschleife auch in Deine fragen()-Funktion einbauen)
Da gäbe es zwar auch noch einiges dran zu verbessern, aber es ist wenigstens nich ganz "bäh".
Gruß,
Simon2.
-
Also, danke für eure Antworten.
Ich sollte noch einmal erwähnen, das ich mit C++ vorher noch nie was am Hut hatte. Daher will ich mich mal für meinen "bäh-code" entschuldigen.
Ich hab das alles jetzt aber anders gelöst (wie bereits gesagt).
Hier könnt ihr euch den Quelltext ja mal ansehen. Es ist wie gesagt eines meiner ersten Programme. Und die Funktion des Programms steht bei der Aufgabe im Vordergrund. Ich bin sicher, das man noch einiges verbessern kann

Gruß,
Shadowhand
-
Du hast die Aufgabe eben nicht gelöst. Das ist ja das Problem. Daß dein Programm gerade zufällig funktioniert, sagt überhaupt nichts aus. Es kann dir jederzeit um die Ohren fliegen.
-
?
-
Ich weiß nicht genau, was der Standard zu Aufrufen von main sagt (ob das überhaupt definiert ist). Aber davon mal abgesehen frißt dein Code den Stack auf und da der endlich ist, wird dein Programm nach einer endlichen Zahl von Durchläufen abstürzen.
Ok, möglicherweise einer sehr großen endlichen Zahl von Durchläufen, aber das hängt von dem jeweiligen System ab, außerdem von deinen Compilereinstellungen und davon ob in China gestern ein Stuhl umgefallen ist.
-
Und damit sind wir genau bei dem Niveau meines C++-Standes.
Speicherorientiertes Programmieren hatte ich noch nicht. Diejennigen, die meinen, das mein Programm doch nichts taugt und sowas (was ich nicht bestreiten will), sollten doch bitte endlich mit erkennen, das es auch nicht von gestern auf heute einen Core 2 Duo gab, sondern das der Weg dahin viel arbeit war. Und wenn man sich heut zu tage mal die Prozessoren von damals ansieht wird man genauso den Kopf schütteln wie die, die mein Programm "zerfressen".
Seht es immer aus der Sicht von Neueinsteigern.Gruß,
Shadowhand
-
Das hat nichts mit Prozessoren zu tun und ich weiß auch nicht, was du mit speicherorientiertem Programmieren meinst. Aber dein Code ist einfach falsch und man kann ihn so nicht stehen lassen.
Es ist klar, daß man als Anfänger noch nicht alle fortgeschrittenen Programmiertechniken kennt. Aber Anfänger zu sein heißt nicht, daß man absichtlich fehlerhaften Code benutzen sollte (selbst wenn dieser zufällig gerade das macht, was man möchte). Auf diese Weise wirst du nie auf einen Grünen Zweig kommen, was das Programmieren betrifft.
-
Shadowhand schrieb:
Seht es immer aus der Sicht von Neueinsteigern.
Das tun wir. Und wir wollen nur verhindern, dass du dir das, was du da fabriziert hast, als Problemlösungsstrategie angewöhnst. Die Gefahr besteht, wenn es dir keiner sagt, denn es funktioniert ja wirklich, zumindest anscheinend.
Wenn du einen Schreinerlehrling siehst, der die Nägel mit der Hand ins Holz drückt, sagst du ihm gleich, dass er einen Hammer benutzen soll, oder wartest du, bis er sich an einem größeren Nagel verletzt?
Das Problem ist, dass du hier etwas benutzt, von dem du zu wissen glaubst, was es tut, damit aber leider falsch liegst. Es ist naheliegend, durch den erneuten Aufruf der aufrufenden Funktion eine Art "Rücksprung" hinzubasteln, aber leider ist das kein Rücksprung, wie du ihn gerne hättest, sondern eine Rekursion.
Bitte glaub uns einfach, dass das Mist ist, und versuch, das Problem mit einer Schleife zu lösen.