kleine schuelerliste - wichtige frage ...



  • 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;
    }



  • Falsches Forum; C++ wäre korrekt.
    Simon



  • code tags!



  • Beidi schrieb:

    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;
    }
    

    In Zeile 13 (s.o.) definierst Du, dass Deine Schüler-Liste genau 1 lang ist. D.h. nur der Schüler 'Schueler[0]' ist ein gültiger Datensatz. Du beginnst aber in Zeile 19 bereits mit dem Index 1. Also wird im folgenden Code auf Speicher zugegriffen, der gar nicht dafür vorgesehen ist. Dann knallt's früher oder später.

    Schau Dir mal std::vector<> an und am Besten auch gleich noch std::string. Damit hast Du es dann wesentlich einfacher.




Anmelden zum Antworten