Vier Fragen, die ich sofort sehen:
Ausgabe 1
In Ihrem struct
, Sie haben:
char * make[200];
In Englisch, das sagt: „ein Array erstellen von 200 Zeigern auf Zeichen ", wenn ich denke, dass Sie sagen möchten," erstellen Sie ein Array von 200 Zeichen. " Sie sollten also stattdessen haben:
char make[200]
.
Ausgabe 2
Du Looping um 1
starten. Dadurch wird das erste Auto im Array übersprungen - denken Sie daran, Arrays sind nullindiziert. So sollten Sie stattdessen:
for (int i = 0 ; i < num ; i++)
und für die Anzeige, könnte man sagen:
cout << "Car #" << (i+1) << ":" << endl << "Please enter the make: ";
Ausgabe 3
Wo Sie sagen:
cin.getline(*Cars->make,200);
und
cin >> Cars->manfYear;
Wo in diesen Zeilen geben Sie an, welches Auto der Benutzer bevölkern wird? Nirgends. Wenn Sie mit i
loopen, müssen Sie tatsächlich i
erwähnen.Diese sollten arbeiten:
cin.getline(Cars[i].make,200);
und
cin >> Cars[i].manfYear;
Beachten Sie, dass wir .
verwenden, nicht ->
. Dies liegt daran, dass die Elemente im Array Cars
tatsächliche Instanzen sind, keine Zeiger. Das Cars
Array ist selbst ein Zeiger, aber nicht sein Inhalt.
Ausgabe 4
Alle Kredite zu @Ben C, die diesem ersten wiesen darauf hin: den >>
Operator mit getline()
Funktion auf cin
Mischen zu seltsamen Verhalten führen kann, mit übrig gebliebenen CR
‚s aus >>
in den Anruf getline()
gehen. Sie könnten entweder alle >>
(Nachteil: Sie haben nicht die 200
Grenze beim Lesen der Marke durchgesetzt) oder alle cin.getline()
(Nachteil: Sie müssen Zeichenfolge Puffer verwenden und dann konvertieren sie für die Anzahl der Autos und Jahr), oder setzen cin.ignore()
nach jedem Aufruf von >>
, etwa so:
cin >> num;
cin.ignore();
und
cin >> Cars[i].manfYear;
cin.ignore();
Auch hier werden alle Kredite an @Ben C diese erste für zu bemerken.
Last but not least
Vereinbarungsklassen/structs haben Kapitalnamen und Variablen Klein/Camelcase-Namen. Erwägen Sie, die struct
von car
zu Car
umzubenennen, und das Array von Cars
zu cars
. Mit anderen Worten, die Umkehrung der Kapitalisierung haben Sie gerade jetzt.
Schließlich stimme ich mit allen anderen Plakaten hier überein: Sie sollten string
anstelle von char
Arrays verwenden.
Brilliant. Alles ergibt jetzt Sinn. Sehr geschätzt. – Dan
mit Ich bin verwirrt Nun, was passiert, ich habe jetzt den folgenden Code: int main (void) { \t struct Auto { \t \t char make [200]; \t \t int manfJahr; \t}; \t int num = 0; \t cout << "Wie viele Autos möchten Sie katalogisieren?"; \t cin >> num; \t Auto * Autos = neues Auto [num]; \t \t for (int i = 0; i> Autos [i] .manfJahr; \t \t // Autos ++; \t} Jetzt habe ich nicht einmal die Möglichkeit, das manfyear eingeben, läuft das Programm nur, aber druckt zufällige Daten. –
Dan