Wo liegt der Fehler? Einlesen in Array
-
Kann mir vielleicht jemand helfen, und sagen warum das so nicht läuft?
# include <iostream> # include <string.h> using namespace std; class schueler { public: char vname[20]; char name[25]; int alter; }; int anzahl,i; schueler datbank[20]; void main (void) { cout << "----------------------- Schueler - DB ----------------------------------- \n"; cout << "--------------------------------------------------------------------------\n\n"; cout << "Bitte geben Sie die Anzahl der Datensätze ein, die Sie eingeben moechten: "; cin >> anzahl; for (i=0;i<=anzahl;i++) { cout << "Wie lautet der Vorname?\n"; cin >> schueler.vname[1]; } }Vielen Dank

-
Ich habs nur mal überflogen aber:
1 Was passiert bei anzahl>20 ??
und ->dnarnold84 schrieb:
# include <iostream> # include <string.h> using namespace std; class schueler { public: char vname[20]; char name[25]; int alter; }; int anzahl,i;//wozu global ? schueler datbank[20];//wozu global? void main (void)// int main () { cout << "----------------------- Schueler - DB ----------------------------------- \n"; cout << "--------------------------------------------------------------------------\n\n"; cout << "Bitte geben Sie die Anzahl der Datensätze ein, die Sie eingeben moechten: "; cin >> anzahl; for (i=0;i<=anzahl;i++) { cout << "Wie lautet der Vorname?\n"; cin >> schueler.vname[1];// öhm was ist schüler ? // es ist der name des struct aber nicht deines Objekts. Das heisst datenbank // und selbst dann solltest würdest du mit // datenbank.vname[1] nen fehler machen erstens solltest du durch die datenbank // durch"zählen" also datenbank[i] und denn solltest du nicht vname[1] benutzen weil das nur ein char ist. } }bleibt noch warum char[20] und kein string ? und wozu string.h ( oder kommt das noch ? )
-
Ich denke er meint etwas, wie das:
# include <iostream> # include <string.h> using namespace std; class schueler { public: char vname[20]; char name[25]; int alter; }; int anzahl,i; schueler datbank[20]; void main (void) { cout << "----------------------- Schueler - DB ----------------------------------- \n"; cout << "--------------------------------------------------------------------------\n\n"; cout << "Bitte geben Sie die Anzahl der Datensätze ein, die Sie eingeben moechten: "; cin >> anzahl; for (i=0;i<anzahl;i++) { cout << "Wie lautet der Vorname?\n"; cin >> datbank[i].vname; } }Aber, ich weiß auch nicht genau, warum hier relativ viel global ist, und warum die Klasse keine get/set überhaupt keine Methoden besitzt und die Daten alle public sind. Abgesehen davon würde ich nicht das array bis <=anzahl gehen lassen, sondern eher bis < anzahl, weil sonst kriegst u.U. nen kleinen Fehler
-
Vorden schrieb:
Ich denke er meint etwas, wie das:
[..]Abgesehen davon würde ich nicht das array bis <=anzahl gehen lassen, sondern eher bis < anzahl, weil sonst kriegst u.U. nen kleinen Fehler
Nen kleinen fehler ? Ich denke so klein ist der nicht.
Dazu kommt das anzahl wie ich schon sagte auch grösser 20 eingegeben werden kann.
Er müsste also eher das schleifenlimit mit der grösse des arrays von Schülern festlegen.btw ist void main() falsch...
-
Vorden schrieb:
Ich denke er meint etwas, wie das:
[...]Aber, ich weiß auch nicht genau, warum hier relativ viel global ist, und warum die Klasse keine get/set überhaupt keine Methoden besitzt und die Daten alle public sind. Abgesehen davon würde ich nicht das array bis <=anzahl gehen lassen, sondern eher bis < anzahl, weil sonst kriegst u.U. nen kleinen Fehler
Víelen Dank....hast mir schon sehr weitergeholfen!
Jetzt hab ich aber ein (ne eher 2) weitere Problemchen
# include <iostream> using namespace std; class schueler { public: char vname[20]; char name[25]; int alter; }; int anzahl,i, auswahl; schueler datbank[20]; void main (void) { do { cout << "----------------------- Schueler - DB ----------------------------------- \n"; cout << "-------------------------------------------------------------------------\n\n"; cout << "--------------------------- Menue ---------------------------------------\n"; cout << "(1) Datensatz eingeben\n"; cout << "(2) Datensatz ausgeben\n"; cout << "(3) Beenden\n"; cin >> auswahl; system ("cls"); switch (auswahl) { case 1: cout << "Bitte geben Sie die Anzahl der Datensätze ein, die Sie eingeben moechten: "; cin >> anzahl; system ("cls"); for (i=0;i<anzahl;i++) { cout << "Eingabe des " <<i+1<<". Datensatz:\n"; cout << "Wie lautet der Vorname?\n"; cin >> datbank[i].vname; cout << "Wie lautet der Nachname?\n"; cin >> datbank[i].vname; cout << "Wie lautet das Alter?\n"; cin >> datbank[i].vname; system ("cls"); } case 2: cout <<"noch nix\n"; } } while (auswahl=3); }Zum ersten springt das Prog sofort nach ausführen der 1 Case-Alternative in die Zweite (anstatt wieder ins Menü),
und zum zweiten bricht das Programm nicht ab, wenn man die "3" zum Beenden drückt!Kannst du mir da nochmal eben kurz helfen?

/EDIT Sry, war falscher Quellcode....kann jemand helfen?
-
Hallo,
Wo ist hier ein switch oder case?
-
hallo
schau mal ob 'do' und/oder 'while' statt 'for' nicht die bessere lösung istmfg f.-th.
-
am ende eines jeden case-abschnitt's muss ein break oder return stehen
mfg f.-th.
-
und das hier
while (auswahl=3); // das ist eine Zuweisungsollte wohl eher so aussehen
while (auswahl==3); // das ist ein Vergleichein return sollte hier lieber nicht stehen, da wir uns in der main befinden.
Bitte ändere endlich void main(void) in int main() denn void main ist nicht zulässig.
-
Naja, an den OP:
Ist dir klar, dass du in deiner Schleife immer wieder deine Datensätze überschreibst ? Wenn ja, ok.
ich möchte nicht besserwisserisch klingen ,aber ich sagte dir schon
das die eingabe der "anzahl" keine gute idee ist.
Du hast nur platz für 20 Klassen in deinem array aber man kann eingeben was man will, und du brichst nicht ab wenns >20 ist ... Das ist Mist..