If-Else Exit
-
Eher an
for (int k=0 ; k <= anzahl; k++)
,for (int k=0 ; k < anzahl; k++)
sollte es in Ordnung bringen, da sonst die Schlaufe einmal zuviel durchlaufen wird.
-
Habe es geändert. Leider gibt er wieder 6,06..aus auch wenn die 4 und folgende nachkommastelle ein bisschen anders ist als vorher
-
Kann es so nicht genau sagen, aber eventuell kann es auch noch daran liegen, dass ein double mit einem size_t dividiert wird. Vielleicht
cout << "leistung:" << (gesamtpower/static_cast<double>(anzahl));
?
-
@titan99_ sagte in If-Else Exit:
Edit: Also normalerweise sollte es so sein, auf Ideone geht es trotzdem.
Das geht nur bei C99-fähigen Compilern, die das für C++ übernehmen. Nennt sich VLA (variable-length array) und ist kein C++.
@NoobHunter12 Zeig doch mal deinen kompletten bisherigen Code, also von dem ersten include bis zur abschließenden Klammer von
main
.
-
#include <iostream> #include <string> #include <strings.h> using namespace std; typedef struct { string manufacturer; string model; string serialNumber; int weight; int power; int numDoors; }Vehicle; const size_t maxVehicles {10}; // Definition der Fuhrparkgröße void copyVehicle(const Vehicle &Fahrzeug1, Vehicle &Fahrzeug2) //Alle Werte von Fahrzeug1 werden in Fahrzeug2 kopiert { Fahrzeug2 = Fahrzeug1; } void writeVehicle(const Vehicle &fahrzeug) //Ausgabe der Fahrzeuge { cout << fahrzeug.manufacturer << '\n'; cout << fahrzeug.model << '\n'; cout << fahrzeug.serialNumber << '\n'; cout << fahrzeug.weight << '\n'; cout << fahrzeug.power << '\n'; cout << fahrzeug.numDoors << '\n'; cout << "\n"; } size_t readVehicle(Vehicle *fahrzeug) { size_t anzahl {0}; setlocale(LC_ALL,"GERMAN"); // Bib. für deutsche Umlaute - Quelle: Google; [Benutzt in der Nutzerabfrage] while(anzahl < maxVehicles) // Sicherstellen, dass Speicher nicht überfüllt { string antwort; while(antwort != "ja" && antwort != "nein") // Erneute Abfrage bei Fehleingabe { cout << "Möchten Sie ein Fahrzeug eingeben? (ja/nein)\n"; cin >> antwort; } if(antwort == "nein") // Falls kein Fahrzeug mehr eingelesen werden soll - Anzahl zurückgeben return anzahl; //Datentyp Vehicle, Name kfz Vehicle kfz; cout << "Wer ist der Hersteller des Fahrzeugs?\n"; cin >> kfz.manufacturer; cout << "Welches Modell ist das Fahrzeug?\n"; cin >> kfz.model; cout << "Wie lautet die Seriennummer?\n"; cin >> kfz.serialNumber; cout << "Wie schwer (in kg) ist das Fahrzeug?\n"; cin >> kfz.weight; cout << "Wie viel Leistung (in PS) hat das Fahrzeug?\n"; cin >> kfz.power; cout << "Wie viele Türen hat das Fahrzeug?\n"; cin >> kfz.numDoors; copyVehicle(kfz, fahrzeug[anzahl++]); } return anzahl; // Erhöhte Anzahl zurückgeben } double averagePower( Vehicle*fahrzeug,size_t anzahl) { double gesamtpower {0}; for (int k=0 ; k < anzahl; k++) { gesamtpower= gesamtpower + fahrzeug[k].power; } cout << "leistung:" << (gesamtpower/anzahl); return (gesamtpower/anzahl); }; int main() { Vehicle fahrzeug[maxVehicles];//Array size_t anzahl = readVehicle(fahrzeug); cout << "Eingegebene Fahrzeuge:\n\n"; for(size_t i{0}; i < anzahl; ++i) { writeVehicle(fahrzeug[i]); // Ausgabe der eingegebenen Fahrzeuge. i=1 -> 2tes Fahrzeug der Arrayliste ausgeben }; //double H = averagePower(const Vehicle*fahrzeug, size_t anzahl); cout << "\nDie durchschnittliche Leistung ist: " <<averagePower(fahrzeug,maxVehicles); //cout << "Leistung:" << averagePower(gesamtpower/static_cast<double>(anzahl)); //for (size_t k{0}; k <= anzahl; k++) //{ //averagePower(fahrzeug.power[k]); //}; }
lasst euch bitte nicht von den ganzen versuchen in der main verwirren.. bin blutiger anfänger
-
Ja, ähm. Was ist denn der Unterschied zwischen der Variable
anzahl
undmaxVehicles
im Ablauf des Programms? Also in Zeile 125 sollten sie vertauscht werden.
-
@titan99_
maxvehicles legt in zeile 17 die array größe fest und anzahl ist die anzahl der tatäschlich eingelesenen fahrzeuge (dachte ich zumindest?!)
-
Um zu testen, kannst du es auch erst einmal alles direkt hinschreiben. Du musst nicht bei jedem Testlauf alles mühsam eingeben:
size_t readVehicle(Vehicle *fahrzeug) { Vehicle vehicle; vehicle.weight=1000; vehicle.numDoors=5; vehicle.power=200; copyVehicle(vehicle, fahrzeug[0]); vehicle.power=100; copyVehicle(vehicle, fahrzeug[1]); vehicle.power=20; copyVehicle(vehicle, fahrzeug[2]); return 3; // dein Code steht noch hier }
Und wenn du die Zeile 125 entsprechend änderst, sollte es klappen. Du hast allerdings noch eine überflüssige Ausgabe in
averagePower
, die kannst du rausnehmen.
Mit den Daten sollte also 320.0/3=106.667 herauskommen. Beachte die 3.
3 Datensätze, nichtmaxVehicles
=10.
-
cout << averagePower(fahrzeug, anzahl) << '\n';
statt:
int main()
{
cout<<"\nDie durchschnittliche Leistung ist: " <<averagePower(const Vehicle*fahrzeug, size_t anzahl);
}Wie kommt man eigentlich auf die Idee, solche Programme zu schreiben, wenn man nicht mal die Grundlagen ansatzweise kennt?
-
danke für eure Bemühung
cout << "\nDie durchschnittliche Leistung ist: " <<averagePower(fahrzeug,anzahl);
hat das Problem gelöst. Die Durchschnittsleistung wird jetzt richtig ausgegeben.
und @Belli :
Das ist ganz einfach. Der Kurs ist ein Pflichtteil meines Studiums. Ich muss ihn also machen. Dank Corona gibt es niemanden (außer wöchentlich ein einstündiges Video-Meeting) der einem C++ beibringt. Dazu kommt dass ich sowieso schon meine Schwierigkeit mit dem Programmieren habe. So kommt also eins zum Anderen
Habe mir aber jetzt einen Nachhilfelehrer für die kommenden Wochen gesucht um die Abgaben irgendwie zu schaffen.
-
@NoobHunter12 sagte in If-Else Exit:
Dank Corona gibt es niemanden (außer wöchentlich ein einstündiges Video-Meeting) der einem C++ beibringt.
Und uns hier
-
@Belli
In der Tatihr habt mich echt gerettet!