Kann man in c++ zum Anfang des Programms zurück kehren durch eine Eingabe?

4 Antworten

Hallo!

Was du willst, verstehe ich schon -- nur erstmal, die Aussage "return 0 beendet das Programm", gilt vielleciht für deines, aber nicht für Java (da ist es exit(0)).

Im allgemeinen aber:

for(;;) // Endlosschleife, 
{
<Menue>

switch (input){
:
case 4: { <do something>
} break;
case 5: exit(0);
case 6: break;
} // End switch
}

 Du muss nicht unbedingt 6 eingeben, ins Menü geht das Programm immer, nur bei 5 wird es beendet

Gruß

manu435 
Fragesteller
 28.10.2015, 22:29

Vielen Dank das ist gut!

0
spaghetticode  28.10.2015, 23:36

1. Hier geht es nicht um Java, sondern um C++. Da hat main() den Rückgabetyp int. 2. Warum eine Endlosschleife mit for? Funktioniert, ist aber grade für einen Anfänger verwirrend. Außerdem ist while(true), bzw. in C++ while(1) ein gängiges Idiom. 3. Warum überhaupt eine Endlosschleife mit break? Das ist ein völlig unnötiger Programmsprung, der die Lesbarkeit ohne Grund beeinträchtigt. Ein Menü kann man wunderbar mit do-while-Schleife lösen und die Eingabe des Nutzers direkt zur Steuerung der Schleife verwenden.

0
verreisterNutzer  29.10.2015, 09:52
@spaghetticode

Natürlich gibt es viele andere Lösungen -- ich hab halt eine simple aufgezeigt, die so auch nur in einer main-Methode funktionieren würde.

Mir ging es nicht um Eleganz und syntaktische Richtigkeit, sondern ums Prinzip for(;;) ist meiner Meinung leichter Verständlich als while(true) -- auf das kommt manu auch noch (auch ich war mal Anfänger). --und wie Reyha schon angemerkt hat, das break  bezieht sich auf's switch -- exit(0) ist der Ausgang

0
verreisterNutzer  29.10.2015, 10:00
@verreisterNutzer
Boolean inSchleife = true;
while(inSchleife) do // Endlosschleife,
{
<Menue>

switch (input){
:
case 4: { <do something>
} break;
case 5: inSchleife = false;
case 6: break;
} // End switch
}
0
Reyha24  29.10.2015, 08:10

Das break bezieht sich auf das switch und nicht auf die Schleife :)

0
spaghetticode  29.10.2015, 10:37
@Reyha24

Das ganze Konstrukt ist unschön, übermäßig komplex für einen Anfänger auf diesem Kenntnisstand, und es bricht mit allen möglichen C++-Konventionen. Was Java-Programmierer in Java machen, ist mir ziemlich egal, der Fragensteller will C++ lernen, und C++ ist schwierig genug, ohne ihn mit solch schrottigem Code (der noch dazu in C++ überhaupt nicht funktioniert) zusätzlich zu verwirren.

0
verreisterNutzer  29.10.2015, 17:30
@spaghetticode

Ich habe keine Lust, hier eine psychologische Diskussion über Java, c++ oder Pascal anzufangen und wie ich Sprachen lerne.

Natürlich kann ich manu einen (bei mir) funktionierenden Code hier posten -- vielleicht funktioniert er dann auch bei manu (kommt aber aauf seine weitere Programmumgebung an, z.B. in main-Methode oder nicht). Und will sie/er dann was ändern, cout << "Dieser Teil ist von spaghetticode" sitzt sie/er wieder auf dem Schlauch und frägt hier nach.

Da ist es doch besser, sie/er haben einen Pseudocode, den sie/er in die entsprechende Sprache umsetzten müssen.

0

Du brauchst return nicht. Das return in der main sagt dem OS, ob das Programm richtig beendet wurde (bei einer 0 ist das der Fall). Was du suchst ist eine Schleife. Für deinen Fall eignet sich eine while- oder do-while-Schleife :)

manu435 
Fragesteller
 28.10.2015, 22:24

Danke!Das return will ich damit wenn ich eine 5 eingebe das Programm sich schließt!

0
Reyha24  29.10.2015, 08:07

Dann lässt du die Schleife bei einer 5 abbrechen. Unter die Schleife packst du dann einfach das return :)

0

Damit Du Dir nicht gleich am Anfang gängige Programmierfehler zu eigen machst:

#define AUSWAHL_BEENDEN 5
int main()
{
    int auswahlNummer;
    while (AUSWAHL_BEENDEN != (auswahlNummer = ErmittleGewuenschteFunktion())
    {
        AusfuehreFunktion(auswahlNummer);
    }
    return 0;
}

Aus welcher Quelle lernst du C++? Dein Stichwort hier sind "Schleifen". In diesem speziellen Fall entweder eine while-Schleife oder eine do-while-Schleife.

Das "return" hast du übrigens falsch verstanden - es bedeutet nicht, dass dein Programm irgendwo hin zurück geht, sondern, dass es einen Wert zurück gibt. (Also nicht "to return to something", sondern "return something to someone".)

Und zwar zurück an die Umgebung, die es ursprünglich ausgeführt hat, sprich, das Betriebssystem. Man kann durch diesen Wert "von außen" feststellen, ob das Programm ordnungsgemäß beendet wurde (weil es mit seiner Arbeit an dieser Stelle fertig war), oder ob es einen Fehler gab und das Programm ungeplant abgebrochen wurde.

Eine 0 gibt man per Konvention zurück, wenn das Programm an dieser Stelle wirklich beendet ist, eine andere Zahl dann, wenn man auf Grund eines Fehlers abbrechen möchte. (Konvention heißt, dass dieses Vorgehen nicht Pflicht ist, dass es aber üblicherweise so gemacht wird und von anderen Programmierern so erwartet wird.)

manu435 
Fragesteller
 28.10.2015, 22:23

Tut mir leid nicht jeder ist Perfekt ich bin gerade im Crash Kurs von Orange on Black.... Und Ich schaue mir das an und mache mein eigenes Ding draus wie ich es halt haben möchte! Man lernt da auch recht viel Und das mit der Schleife kannte ich nicht da ich ein Anfänger bin! Wusste nicht das anfängerfragen so ungern gesehen sind danke aber für die schnelle Antwort! Und das return 0 benutze ich damit das Programm sich einfach beendet! Ich wusste nicht das es noch andere Funktionen hat!

0
spaghetticode  28.10.2015, 22:26

Oh, wirkte meine Antwort genervt? Das sollte sie gar nicht. :-) Kein Problem mit Anfängerfragen, im Gegenteil. Lieber einmal zuviel gefragt als einmal zu wenig.

0
manu435 
Fragesteller
 28.10.2015, 22:29

Ok :-) Danke.

0
manu435 
Fragesteller
 29.10.2015, 07:08

Leider weiß ich nicht was in der Bedingung und Anweisung stehen soll. Das was ich im Internet auf anderen Seiten gesehen habe passt bei mir nicht so! Kannst du mir da helfen?

0
spaghetticode  29.10.2015, 10:50
@manu435

Helfen ja - Fertig-Code servieren nein, denn dabei lernst du nichts. Vorab aber die wirklich dringende Empfehlung: kauf dir ein vernünftiges Einsteigerlehrbuch und lerne die Grundlagen von C++ sauber und vernünftig.

Die Taktik, sich Codeschnippsel und einzelne Tutorial-Teile im Internet zusammenzusuchen, wird nicht gut gehen und wird dir eher früher als später um die Ohren fliegen. Das wäre schade!

Zu deinem Problem:

Eine do-while-Schleife funktioniert so:

do { 
// Code, der wiederholt werden soll
} while ( /* Abbruchbedingung */ );

Du möchtest das Anzeigen eines Menüs und das Einlesen der Benutzereingabe wiederholen, und zwar solange, bis (Abbruchbedingung!) ... ja, bis was denn eigentlich?

Bis der Benutzer eine "5" für das Programmende eingibt.

Nun heißt die Schleife aber nicht do-until-Schleife (Wiederhole solange bis), sondern do-while-Schleife (Wiederhole, solange...). Du willst also wiederholen, solange der Benutzer keine "5" eingibt.

Die Struktur deines Programms sieht damit so aus:

do { 
// Zeige das Menü an
// Lies die Eingabe des Benutzers
} while ( /* Eingabe ist NICHT "5" */ );
0
manu435 
Fragesteller
 29.10.2015, 16:44

Ok. Vielen vielen dank! Also so habe ich das verstanden jedoch habe ich noch zeei Fragen. 1. Können sie mir ein Buch empfehlen? 2.(/* eingabe ist Nicht '5' */) Wie schreibt man das oder kann man das dann das muss man doch irgendwie auf englisch machen nach while?! Oder einfach so wie es da steht??

0
spaghetticode  29.10.2015, 18:11

Du musst mich nicht Siezen. :-) Bücher von Dirk Louis sind für Anfänger super - die haben immer mal andere Titel, sind aber inhaltlich sehr ähnlich. Einfach nach einem möglichst "neuen" Erscheinungsdatum gucken, dann passt das schon. Bei Amazon kann man ja auch nach dem Autor suchen. Zur Frage: der Operator für "nicht gleich" sieht in C++ so aus: x != 2.

0