If-Else Exit



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



  • @Belli
    wieso? ich habe quasi die ganze aufgabe nur copy und paste eingefügt 😮
    ich versuche meine auffassung der aufgabe mal zu schildern.
    abfrage ob ein auto eingelesen werden möchte
    -> ja -> eckdaten abfrage -> abfrage ob noch ein auto eingelesen werden möchte ->ja -> eckdaten abfrage
    nachdem die gewünschte anzahl an autos eingelesen wurde, werden die eingelesenen autos durch write() aufgelistet

    und wenn ich es richtig verstanden habe dient die copy() nur dazu um quasi durch überschreiben ein array zu füllen (???)



  • Aber in der Aufgabe steht doch nur:
    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.

    Da steht weder, dass gefragt werden soll, ob noch ein Fahrzeug eingegeben werden soll, noch, dass die Funktion true oder false zurückgeben soll?
    Also einfach so viel einlesen, wie ins Array passen ...
    Wenn die Funktion nur ein einziges Mal aufgerufen werden soll, und dabei alle einzulesenden Fahrzeuge einliest - mit oder ohne Abfrage - dann macht ein Rückgabewert ja auch wenig Sinn, was soll der denn für eine Aussagekraft haben?

    Aber egal, es ist Deine Aufgabe, interpretiere sie, wie Du es für richtig hältst, und fang an, sie entsprechend umzusetzen.

    Kompiliere und teste oft zwischendurch in kleinen Abschnitten, damit Du mögliche Fehler möglichst schnell findest.

    Wenn es dann Probleme gibt, poste den Code hier und schreib dazu, was passiert und was Du stattdessen erwartest ...
    nach Möglichkeit immer ein Minimalbeispiel ohne zuviel Ballast, der für die Fehlersuche nicht relevant ist.

    Edit:
    Wenn die Einlesefunktion tatsächlich abfragt, ob noch ein Fahrzeug eingelesen werden soll oder nicht, wäre ein sinnvoller Rückgabewert die Anzahl der tatsächlich eingelesenen Fahrzeuge.

    Edit 2:
    Du solltest übrigens anstelle eines C-Arrays ein std::array nehmen, ich sehe nicht, dass die Aufgabenstellung das ausschließt ...



  • @Belli ok ich trete zwar seit stunden auf der selben stelle aber werde mich mit sicherheit nochmal melden bzgl hilfe. danke schonmal.

    zu edit1: das macht sinn. ist nur die frage wie man das realisiert. dadurch ist es mit sicherheit auch "einfacher" die fahrzeuge dann später in der funktion copy ins array einzupflegen (denke ich)

    zu edit2: okay, werde mich dann erstmal mit der funktion/bedeutung eins std::arrays bekannt machen müssen.



  • #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct Vehicle
    {
    string manufacturer;
    string model;
    string serialNumber;
    int weight;
    int power;
    int numDoors;
    };
    
    const size_t maxVehicles {10};
    
    void copyVehicle(const Vehicle &source, Vehicle &dest)
    {
       dest = source;
    }
    
    void writeVehicle(const Vehicle &fahrzeug)
    {
       cout << fahrzeug.manufacturer << '\n';   
    }
    
    
    size_t readVehicle(Vehicle *fahrzeug)
    {
       size_t anzahl {0};
       
       while(anzahl < maxVehicles)
       {
          string antwort;
          
          while(antwort != "ja" && antwort != "nein")
          {
             cout << "\nFahrzeug eingeben (ja/nein)\n";
             cin >> antwort;
          }
          
          if(antwort == "nein")
             return anzahl;
             
          Vehicle fz;
          
          cout << "Wer ist der Hersteller des Fahrzeugs?\n";
          cin >> fz.manufacturer;
          
          //usw.
          
          copyVehicle(fz, fahrzeug[anzahl++]);
       }
       
       return anzahl;
    }
    
    int main()
    {
       Vehicle fahrzeug[maxVehicles];
       
       size_t anzahl = readVehicle(fahrzeug);
     
       for(size_t i{0}; i < anzahl; ++i)
       {
          writeVehicle(fahrzeug[i]);
       }
    }
    


  • @Belli ohh genau so soll es sein 😍 hammer, vielen dank! das hat mir sehr geholfen



  • Die Funktion sollte dann aber besser readVehicles (also Plural) heißen.
    Und das eigentliche Einlesen eines Fahrzeugs sollte dann in die Funktion readVehicle.



  • @Th69 plural in zeile 63 bei der funktion meinst du?



  • Ja, bei der Definition in Zeile 29 als auch beim Aufruf in Zeile 63.



  • Um die Durchschnittsleistung aller Fahrzeuge zu erhalten muss zu jeden Arrayeintrag doch auf die Struct zugegriffen werden oder?



  • double averagePower(Vehicle*fahrzeug)
    {

    double Mittelwert = (fahrzeug[0].power + fahrzeug[1].power )/2;
    
    cout<< Mittelwert << ;
    

    }

    Das ist mein Gedankengang um auf die einzelenen Leistungseingaben der Fahrzeuge zuzugreifen. Den Wert "Mittelwert" will ich dann in der Main ausgeben,

    Leider kommt folgende Fehlermeldung zu meiner Funktion averagePower :

    "error: expected primary-expression before ' ; ' token



  • @NoobHunter12 sagte in If-Else Exit:

    Leider kommt folgende Fehlermeldung zu meiner Funktion averagePower :

    "error: expected primary-expression before ' ; ' token

    Der Compiler ist so nett und gibt auch noch Zeile und Spalte an, wo er den Fehler entdeckt hat.

    Manchmal schreibt er auch noch sowas:

    cout<< Mittelwert << ;
                         ^     // hier kannst du auch die Spalte erkennen
    


  • @DirkB bei einem ausschnitt wird der fehler demnach in zeile 3 angezeigt. leider ohne spalte



  • @NoobHunter12 sagte in If-Else Exit:

    @DirkB bei einem ausschnitt wird der fehler demnach in zeile 3 angezeigt. leider ohne spalte

    Und aus ""error: expected primary-expression before ' ; ' token" erfährst du, dass der Compiler einen Ausdruck vor dem ; erwartet.

    Ein Ausdruck ist so ziemlich alles, was rechts von einer Zuweisung (Gleichheitszeichen) stehen kann.
    Ein Variablenname, ein Literal (String oder Zahl), ein Funktionsaufruf. Jedenfalls etwas, was einen Wert liefert, den cout da ausgeben kann.

    Was möchtest du nach Mittelwert denn noch ausgeben?


Anmelden zum Antworten