kleine schuelerliste - pls help
-
Also ich habe mir ein Übungsprogramm geschrieben in c++ jedoch kommt immer wenn ich aus der schleife rausgehen will ein runtime error
... vielleicht könnte sich ja pls ma jemand das ding anschauen un mir bescheid geben was falsch ist , danke.
#include <iostream>
#include <iomanip>
using namespace std;int main () {
int j, Sa, i;
struct klasse { //struct
double Sn;
char Name[20];
char Vorname [10];} Schueler[1];
cout <<" Geben sie die schueleranzahl ein: " <<endl; // eingabe ob in schleife rein ja / nein
cin >> Sa;cout <<"Sie wollen "<<Sa <<" Schueler eintragen! " <<endl;
j= 1;
while (Sa > 0)
{
cout <<" Geben sie die Schuelernummer ein :" <<endl; //eingabe der schueler
cin >> Schueler[j].Sn;
cout <<" Geben sie den Namen ein: " <<endl;
cin >> Schueler[j].Name;
cout <<" Geben sie den Vornamen ein : " <<endl;
cin >> Schueler[j].Vorname;cout <<" Wie viele Schueler wollen Sie noch eingeben ?? " <<endl; //abfrage ob nochma while schleife ja / nein
cin >> Sa;
j++; //zaehler für struct
}for ( i = 1; i <= j ; i++)
{
cout << Schueler[j].Sn <<Schueler[j].Name <<Schueler[j].Vorname; // ausgabe für die liste
}fflush (stdin);
getchar ();
return 0;
}
-
Wenn du die cpp-Tags benutzt, dann kann man den Quelltext auch lesen. Ich mache das mal für dich, damit ich selber was erkennen kann. Mach das beim nächsten Mal aber bitte selbst:
#include <iostream> #include <iomanip> using namespace std; int main () { int j, Sa, i; struct klasse { //struct double Sn; char Name[20]; char Vorname [10]; } Schueler[1]; cout <<" Geben sie die schueleranzahl ein: " <<endl; // eingabe ob in schleife rein ja / nein cin >> Sa; cout <<"Sie wollen "<<Sa <<" Schueler eintragen! " <<endl; j= 1; while (Sa > 0) { cout <<" Geben sie die Schuelernummer ein :" <<endl; //eingabe der schueler cin >> Schueler[j].Sn; cout <<" Geben sie den Namen ein: " <<endl; cin >> Schueler[j].Name; cout <<" Geben sie den Vornamen ein : " <<endl; cin >> Schueler[j].Vorname; cout <<" Wie viele Schueler wollen Sie noch eingeben ?? " <<endl; //abfrage ob nochma while schleife ja / nein cin >> Sa; j++; //zaehler für struct } for ( i = 1; i <= j ; i++) { cout << Schueler[j].Sn <<Schueler[j].Name <<Schueler[j].Vorname; // ausgabe für die liste } fflush (stdin); getchar (); return 0; }
-
Hier steht schon eine Antwort: http://www.c-plusplus.net/forum/viewtopic-var-p-is-1820642.html#1820642
-
Das ist irgendwo Käse.
Dufrägst wie viele Schüler eingetragen werden. Dann fängst du mit der Schleife an. Im ersten Schleifendurchgang frägst du dann nochmal nach, wie viele weitere Schüler eingatragen werden sollen.
Mach da mal nur ein "--Sa;" hin und frag nicht nochmal nach der Schülerzahl...
Ansonsten wäre eine Genauere Fehlermeldung nicht schlecht.
-
while (Sa > 0) { cout <<" Geben sie die Schuelernummer ein :" <<endl; //eingabe der schueler cin >> Schueler[j].Sn; cout <<" Geben sie den Namen ein: " <<endl; cin >> Schueler[j].Name; cout <<" Geben sie den Vornamen ein : " <<endl; cin >> Schueler[j].Vorname; cout <<" Wie viele Schueler wollen Sie noch eingeben ?? " <<endl; //abfrage ob nochma while schleife ja / nein cin >> Sa; j++; //zaehler für struct }
Endlosschleife.
Edit:
sry, quatsch. Aber wie schon gesagt wurde greifst du auf Elemente des Arrays zu, die's gar nicht gibt. Ein Vektor wäre hier sinnvoller.
-
Hast ein paar Fehler:
#include <iostream> #include <iomanip> using namespace std; int main () { int j, Sa, i; // Sprechendere Variablennamen verwenden. Wer denkt denn bei Sa schon an Schüleranzahl? Außerdem Variablen erst dann deklarieren, wenn sie wirklich gebraucht werden. struct klasse { //Cool, C-Stil. Ist zwar nicht verkehrt, in C++ kann man das aber auch hübscher schreiben. double Sn; // Wow, eine (quasi) kontinuierliche Schüleranzahl. Muss ja eine ganz schön große Schule sein. char Name[20]; // Wehe dem Schüler mit einem Doppelnachnamen! char Vorname [10]; // Wehe der armen Christiane! } Schueler[1]; cout <<" Geben sie die schueleranzahl ein: " <<endl; // eingabe ob in schleife rein ja / nein // Der obige Kommentar passt zwar zu dem was eigentlich passiert, aber die Frage passt ja wohl überhaupt nicht. cin >> Sa; cout <<"Sie wollen "<<Sa <<" Schueler eintragen! " <<endl; j= 1; while (Sa > 0) { cout <<" Geben sie die Schuelernummer ein :" <<endl; cin >> Schueler[j].Sn; // Und hier hast du ein Problem: Schueler hat genau 1 Element, nämlich Schueler[0]. Alles was du hier machst greift auf Elemente zu, die es gar nicht gibt. cout <<" Geben sie den Namen ein: " <<endl; cin >> Schueler[j].Name; // siehe oben cout <<" Geben sie den Vornamen ein : " <<endl; cin >> Schueler[j].Vorname; // siehe oben cout <<" Wie viele Schueler wollen Sie noch eingeben ?? " <<endl; cin >> Sa; // Sehr sinnvoll. gibt es eigentlich irgendeinen Grund etwas anderes als 1 oder 0 anzugeben? j++; } for ( i = 1; i <= j ; i++) { cout << Schueler[j].Sn <<Schueler[j].Name <<Schueler[j].Vorname; // siehe oben } fflush (stdin); getchar (); return 0; }
Deine Zugriffe auf nicht existierende Elemente sorgen für den Absturz. Bedenke auserdem, dass Arrays immer bei 0 anfangen.
-
Naja also des hab ich jetzt nur so wenig gemacht weil ich ja keine riesen teile da eintragen muss.. un ja [1] hab ich halt ma gemacht um zu schauen ob s vil. daran liegt das wenn ich 32 mach un nur 1 eintrag der rest leer bleibt un deshalb es abstürtzt ja ok .... initialisieren vom struct habe ich vergessen ... allerdings mach ich ja indem ich j = 1 setzte sage ich das ich beim 1ten anfangen will un dann was eintragen ? ? oder nicht
un die fragen sind ja auch egal sind nur für mich zum bissl übersichtlich machen
-
ahahahahh lol jetzt hab ich meinen fehler auch erkannt ... ich depp hab vergessen das es bei 0 anfägnt zu zählen ok danke ^^
-
#include <iostream> #include <string> #include <vector> #include <limits> struct Schueler { std::string vorname; std::string nachname; }; typedef std::vector<Schueler> SchuelerVector; int main() { SchuelerVector schuelerListe; std::string eingabe; std::cout << "*** Schuelerverwaltung ***" << std::endl; do { Schueler neuerSchueler; std::cout << "\n--- Neuer Schueler ---" << std::endl; std::cout << "Vorname: "; std::cin >> neuerSchueler.vorname; std::cout << "Nachname: "; std::cin >> neuerSchueler.nachname; schuelerListe.push_back(neuerSchueler); std::cout << "\nWeiteren Schueler eingeben? (j/n)" << std::endl; std::cin >> eingabe; } while (eingabe == "j" || eingabe == "J"); std::cout << "\n--- Schuelerliste ---\n" << std::endl; for (SchuelerVector::iterator it = schuelerListe.begin(); it != schuelerListe.end(); ++it) { std::cout << "Vorname: " << it->vorname << std::endl; std::cout << "Nachname: " << it->nachname << "\n" << std::endl; } return 0; }
-
Alles klar danke jetzt funktioniert alles vielen dank : )