Frage von manu435, 111

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

Also es gibt ja return 0 welches das Programm schließt ich will aber wenn etwas bestimmtes eingegeben wurde das die Startoption wieder möglich sind. Dies geht nach ausprobieren mit return 1 nicht.

Hier mal ein Bsp.:

       case '4':
       cout << "\t5. Programm wird automatisch beendet wenn sie 5 druecken" << endl;
       cout << "\t6. Wenn sie zurueck ins Menue wollen dann druecken sie 6";
       break; 

       cin >> auswahl; 
       
       if (auswahl == '5') {
       return 0; 
       }
       else if ( auswahl == '6') {
       return 1;

Also ich will wenn man 6 drückt, dass man ins Menü wieder gelangt wo man andere Optionen auswählen kann wie mache ich das? Zum Beispiel wieder 4 drücken.. was dann wenn man wieder 6 drückt zur endlos schleife wird!

Hoffe ihr versteht mich Danke an alle

Antwort
von Mikkey, 51

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;
}
Antwort
von spaghetticode, 111

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.)

Kommentar von manu435 ,

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!

Kommentar von spaghetticode ,

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.

Kommentar von manu435 ,

Ok :-) Danke.

Kommentar von manu435 ,

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?

Kommentar von spaghetticode ,

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" */ );
Kommentar von manu435 ,

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??

Kommentar von spaghetticode ,

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.

Antwort
von Reyha24, 84

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 :)

Kommentar von manu435 ,

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

Kommentar von Reyha24 ,

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

Antwort
von Tschoo, 88

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ß

Kommentar von manu435 ,

Vielen Dank das ist gut!

Kommentar von spaghetticode ,

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.

Kommentar von Tschoo ,

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

Kommentar von Tschoo ,
Boolean inSchleife = true;
while(inSchleife) do // Endlosschleife,
{
<Menue>

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

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

Kommentar von spaghetticode ,

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.

Kommentar von Tschoo ,

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.

Keine passende Antwort gefunden?

Fragen Sie die Community