If-Else Exit



  • @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 ... 🤔



  • @Belli mit Code::blocks und ja du hast recht 😃 das ist wirklich unsinn



  • @Belli wenn ich die aufgabe richtig verstanden habe dann müsste ja aus der read funktion alles an die write funktion übergeben werden und dort aufgelistet werden. das heißt wenn ich 3 verschiedene autos in die read funktion einlese samt ihren eckdaten, sollten diese doch auch in der write funktion untereinander aufgelistet werden oder?
    so als eingabeübersicht quasi..



  • @NoobHunter12
    Eher nicht.
    Die verschiedenen Funktionen sollen wohl nacheinander aus main heraus aufgerufen werden.
    Du kannst also sehr schön eine nach der anderen schreiben und testen.
    Ich halte es übrigens für schlecht, die Einlesefunktion mehr als ein Fahrzeug pro Aufruf einlesen zu lassen.
    Entweder rufst Du die aus main so oft auf, wie benötigt (Schleife), oder, besser, Du schreibst eine weitere Funktion, die aus main einmal aufgerufen wird und die dann die benötigten Aufrufe der Einlesefunktion übernimmt.
    Nur meine Meinung...

    Bei der Ausgabe analog: ich würde eine Funktion für die Ausgabe eines einzigen Fahrzeugs schreiben, die dann so oft wie benötigt aufrufen, evtl. eine weitere Funktion, die alle Fahrzeuge durch wiederholten Aufruf der Ausgabefunktion ausgibt...
    Wenn Du vorher nicht genau weißt, wieviel Fahrzeuge erfasst und ausgegeben werden sollen, ist ein Array nicht die beste Wahl, wenn Du es aber weißt, ist die Abfrage, ob ein weiteres Fahrzeug eingegeben werden soll, überflüssig.



  • @Belli "Vor dem Einlesen wird zuerst der Benutzer gefragt, ob überhaupt ein weiteres Fahrzeug eingelesen werden soll. 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." zitat aus der aufgabe.

    da steht doch dass beliebig bzw mehrere fahrzeuge aufeinmal eingelesen werden sollen/können?



  • @Belli ok verstehe. aber in der aufgabe steht klar drin dass mit einem array gearbeitet werden soll. wahrscheinlich wird dann das problem der unbestimmten menge an fahrzeugen beachtet und es geht nur darum wie ein array übergeben werden kann?



  • @NoobHunter12
    Naja, wenn Du es so machen musst, mach es so.
    Keine Ahnung, wie der Aufgabenersteller reagieren würde, wenn Du stattdessen dann einen vector nehmen würdest ...

    @NoobHunter12 sagte in If-Else Exit:

    @Belli "Vor dem Einlesen wird zuerst der Benutzer gefragt, ob überhaupt ein weiteres Fahrzeug eingelesen werden soll. 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." zitat aus der aufgabe.

    da steht doch dass beliebig bzw mehrere fahrzeuge aufeinmal eingelesen werden sollen/können?

    Ich lese daraus, dass die Funktion aufgerufen werden soll, abfragen soll, ob ein (weiteres) Fahrzeug eingelesen werden soll, entsprechend reagiert und dann true oder false zurückgeben soll - ansonsten würde die Funktion ja nur dann false zurückgeben, wenn überhaupt kein Fahrzeug eingelesen wurde?



  • @NoobHunter12 sagte in If-Else Exit:

    Die genaue Aufgabe lautet:
    ...

    Da steht allerdings nix davon, dass die Einlesefunktion überhaupt irgendwas zurückgeben soll, also vielleicht soll sie doch alles in einem Rutsch tun?
    Deine Beschreibungen der Aufgabe sind leider widersprüchlich ...


Anmelden zum Antworten