If-Else Exit



  • Mahlzeit..

    Ich habe eine Funktion mit einer If-Else Abfrage. Wie kann ich im Else "false" returnen und das programm beenden UND zur main zurückkehren. Wenn ich meine Eingabe so tätige dass ich ins Else komme springt er einfach weiter runter ins nächste Programm..

    bool entscheidung1 ()
    if (entscheidung1 == "ja")
    {
    cout << "weiter";
    }

    else
    {
    return false;
    };

    bool entscheidung2 ()

    -----> hier springt er dann immer hin, möchte aber dass bei einer eingabe die nicht ja bzw nein lautet das programm endet..



  • Bitte poste ein vollständiges, fehlerfrei kompilierbares Programm, das den Fehler enthält.

    Edit:
    Allerdings ohne überflüssigen Ballast, also nur das, was für das Nachvollziehen des 'Fehlers' notwendig ist (Minimalbeispiel).



  • @Belli ich habe versucht überflüssigen ballast rauszulassen aber anscheinend war es dann zu viel 😃 ?



  • @NoobHunter12

    das programm beenden UND zur main zurückkehren.

    Gar nicht, da sich beide gegenseitig ausschließen.



  • @NoobHunter12 sagte in If-Else Exit:

    @Belli ich habe versucht überflüssigen ballast rauszulassen aber anscheinend war es dann zu viel 😃 ?

    Was Du da gepostet hast, ist nicht kompilierbar ...



  • @manni66 "Wenn die Antwort Ja lautet, lesen Sie die einzelnen Eigenschaften ein. Die Funktion gibt true zurück, wenn ein weiteres Fahrzeug eingelesen wurde. Die Funktion gibt false zurück, wenn der Benutzer Nein geantwortet hat und kein weiteres Fahrzeug eingelesen wurde. "

    Das ist ein Zitat aus der Ausfgabe. Habe ich dann die Aufgabe falsch verstanden?



  • @NoobHunter12
    Habs jetzt mal ausprobiert.
    Bei mir funktioniert Dein Code so, wie er soll ...
    Was hast Du für eine Grafikkarte?



  • @NoobHunter12 sagte in If-Else Exit:

    Das ist ein Zitat aus der Ausfgabe. Habe ich dann die Aufgabe falsch verstanden?

    Da steht nichts von „nach main zurück“ oder „beenden“.
    Aber es steht auch was von „true zurück geben“ - da sollte der Compiler aber eine Warnung geben.

    {} um den Code der Funktion wären noch ganz hübsch.



  • @NoobHunter12 sagte in If-Else Exit:

    bool entscheidung1 () 
     if (entscheidung1 == "ja")
    

    Wo ist da die Eingabe?
    Und die Abfrage macht keinen Sinn (bzgl. des verwendeten Bezeichners)...



  • bool readVehicle(Vehicle*vehicle) //pointer auf die Struct
    {

    string Entscheidung; 
    
        cout << "Moechten Sie ein weiteres Fahrzeug einlesen?\nDann geben Sie bitte ja ein\nNein zum Beenden\n\n\n";
        cin >> Entscheidung;
    
     if(Entscheidung == "ja")
    {
        cout << "\nweiter\n\n";
    }
    
    else
    {
        cout << "Schade";
         return false;
    
    
    
    };
    
    
    
    cout << "Wer ist der Hersteller des Fahrzeugs?\n";
    cin >> vehicle->manufacturer;
    

    }
    void writeVehicle (Vehicle*vehicle)

    das ist jetzt ein auszug aus meinem code.. ich möchte dass er, wenn man "nein" eingibt ein false zurück gibt und die funktion verlässt. aktuell springt bei dann zu "wer ist hersteller..." 😕


  • Mod

    Da wird noch mehr kaputt sein, das zu den komischen Beobachtungen führt. Ich wiederhole von oben:

    @Belli sagte in If-Else Exit:

    Bitte poste ein vollständiges, fehlerfrei kompilierbares Programm, das den Fehler enthält.

    Edit:
    Allerdings ohne überflüssigen Ballast, also nur das, was für das Nachvollziehen des 'Fehlers' notwendig ist (Minimalbeispiel).

    Da das nicht geklappt hat, hier noch einmal eine Anleitung:
    https://www.c-plusplus.net/forum/topic/200753/du-brauchst-hilfe

    Es wäre auch schön, wenn du deinen Code vernünftig einrücken würdest. Konsistente Einrückung deckt oft schon Logikfehler auf den ersten Blick auf, die in solch zufälligem Zeichensalat wie deinem nur mühsam zu finden sind.



  • @NoobHunter12 Dann lass dir doch mal den Inhalt von Entscheidung ausgeben.
    cout >> "du hast <" >> Entscheidung >>"> eingegeben.\n"

    Oder versuche den Debugger zu benutzen.

    Achte bei der Ausgabe auch auf die Positionen der <>



  • @SeppJ Sorry für meinen "zeichensalat". Bin in der uni gerade so mit C durchgekommen und darf jetzt dank der Coronasituation eigenständig C++ lernen. Wenn Montag nicht die erste Abgabe wäre würde ich euch auch nicht damit nerven 😉



  • @NoobHunter12 Gerade dann solltest du gute Fragen stellen.



  • @manni66 du hast recht. ist allerdings garnicht so einfach wenn man selbst nicht genau weiß was man überhaupt machen soll 😃



  • @NoobHunter12
    Noch einmal:
    Mach ein vollständiges Beispiel!
    Deine Funktuon, die nicht tut, was sie soll, eine kurze main mit den notwendigen Initialisierungen und dem Aufruf der Funktion, so, dass man das kompilieren und nachvollziehen kann.
    Dazu schreibst Du, was passiert, und was Deiner Meinung nach passieren sollte.
    Ob Du es glaubst, oder nicht, so bekommst Du hier ganz schnell kompetente Hilfe.
    Anderenfalls wird es schwierig, merkst Du selbst, oder?



  • #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>

    using namespace std;

    typedef struct
    {
    string manufacturer;
    string model;
    string serialNumber;
    int weight;
    int power;
    int numDoors;
    }Vehicle;

    bool readVehicle(Vehicle*Fahrzeug) //pointer auf die Struct
    {

    string Entscheidung; // string da mehrere buchstaben in der antwort
    
            for (int i =0; i < 10; i++) //Limit Fahrzeuganzahl
                {
    
        cout << "Moechten Sie ein weiteres Fahrzeug einlesen?\nDann geben Sie bitte ja ein\nNein zum Beenden\n\n\n";
        cin >> Entscheidung;
    
    
     if(Entscheidung == "ja") // " " wegen string, bei einzelnem Char wäre ' ' ausreichend.
    
        {
        cout << "\nOkay\n";
        }
    
     else
        {
        cout << "Schade";
        return false;
    
    
    
        };
    
    
    
    cout << "Wer ist der Hersteller des Fahrzeugs?\n";
    cin >> Fahrzeug->manufacturer;
    
    cout << "Welches Modell ist das Fahrzeug?\n";
    cin >> Fahrzeug->model;
    
    cout << "Wie lautet die Seriennummer des Fahrzeugs?\n";
    cin >> Fahrzeug->serialNumber;
    
    cout << "Wie schwer (in Kg) ist das Fahrzeug?\n";
    cin >> Fahrzeug->weight;
    
    cout << "Wie viel Leistung (in PS) hat das Fahrzeug?\n";
    cin >> Fahrzeug->power;
    
    cout << "Wie viele Türen hat das Fahrzeug?\n";
    cin >> Fahrzeug->numDoors;
                }
    

    }
    void writeVehicle (Vehicle*Fahrzeug)
    {

    cout << "\n\nDas eingelesene Fahrzeug hat folgende Parameter:\n";
    
    cout << "Hersteller:" << Fahrzeug->manufacturer << "\n";
    cout << "Modell:" << Fahrzeug->model << "\n";
    cout << "Seriennummer:"<< Fahrzeug->serialNumber << "\n";
    cout << "Gewicht:"<< Fahrzeug->weight << "kg\n";
    cout << "Leistung:" << Fahrzeug->power << "PS\n";
    cout << "Türen:" << Fahrzeug->numDoors << "\n";
    

    }
    void copyVehicle (const Vehicle* Fahrzeuge1, Vehicle* Fahrzeuge2)
    {

    }

    int main()
    {
    Vehicle Autohaus [10];

    Vehicle Fahrzeug;
    readVehicle(&Fahrzeug);
    writeVehicle(&Fahrzeug);
    
    return 0;
    

    }

    Das habe ich bis jetzt zusammenbekommen.
    Man kann mehrere Fahrzeuge einlesen und Angaben zu den einzelenen Fahrzeugen machen.

    Die genaue Aufgabe lautet:

    writeVehicle() Bekommt eine Referenz vom Typ Vehicle übergeben und gibt alle Eigenschaften des Fahrzeugs in übersichtlicher Form aus, z.B.: Hersteller: Opel Modell: Astra....[...]

    copyVehicle() Bekommt zwei Referenzen übergeben, die erste Referenz ist das zu kopierende Fahrzeug und in die zweite Referenz sollen alle Werte kopiert werden. Überlegen Sie welcher Parameter sinnvollerweise als unveränderlich deklariert werden sollte. Die Funktion hat keinen Rückgabewert.

    Deklarieren Sie in der main() Funktion ein Array vom Vehicle Datentyp (mit einer festen Dimension). Lesen Sie mit der Funktion readVehicle() die Fahrzeug Eigenschaften von mehreren Fahrzeugen von der Konsole ein. Achten Sie darauf, dass Sie prüfen ob ein weiteres Fahrzeug Element noch in ihr Array passt. Geben Sie die Fahrzeuge dann nacheinander mit writeVehicle() wieder aus

    Verwenden Sie die Funktion copyVehicle(), um das erste Fahrzeug im Array in eine Variable vehicleCopy vom Typ Vehicle zu kopieren und geben auch das kopierte Fahrzeug auf.



  • @Belli sagte in If-Else Exit:

    @NoobHunter12
    Noch einmal:
    Mach ein vollständiges Beispiel!
    Deine Funktuon, die nicht tut, was sie soll, eine kurze main mit den notwendigen Initialisierungen und dem Aufruf der Funktion, so, dass man das kompilieren und nachvollziehen kann.
    Dazu schreibst Du, was passiert, und was Deiner Meinung nach passieren sollte.
    Ob Du es glaubst, oder nicht, so bekommst Du hier ganz schnell kompetente Hilfe.
    Anderenfalls wird es schwierig, merkst Du selbst, oder?

    Did it, (hoffentlich 😃 )



  • Was benutzt Du denn für einen Compiler?
    Das kompiliert bei mir noch immer nicht - Du hast ja dort C-Header eingebunden?
    Was sollen denn

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    

    da?



  • Ich hab Dir mal ein Minimalbeispiel für Deine Eingangsfrage gebaut:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    bool readVehicle() 
    {
    
       string Entscheidung; 
    
       cout << "Moechten Sie ein weiteres Fahrzeug einlesen?\nDann geben Sie bitte ja ein\nNein zum Beenden\n\n\n";
       cin >> Entscheidung;
    
    
       if(Entscheidung == "ja") // " " wegen string, bei einzelnem Char wäre ' ' ausreichend.
       {
          cout << "\nOkay\n";
       }
       else
       {
          cout << "Schade";
          return false;
       }
    
       cout << "Entscheidung war ja\n";
       return true;
    }
    
    int main()
    {
       bool entscheidung = readVehicle();
       
       cout << "entscheidung nach Funktionsaufruf = " << boolalpha << entscheidung << '\n';
       
       return 0;
    }
    

    Erwartungsgemäß tut es genau das, was man erwartet ... 🤔


Anmelden zum Antworten