Warum kann ich im ersten Array einer Liste nichts mit std :: cin.getline() speichern?



  • Hi,
    Mithilfe von Listen kann man ja mehr oder weniger einfach eine nicht bekannte Anzahl an Variable erstellen. Hab das Prinzip verstanden und die (Test-)Programme laufen auch gut. Aber warum wird beim ersten ausführen der for-Schleife immer die std :: cin.getline()-Anweisung übersprungen?

    #include <iostream>
    #include <conio.h>
    
    struct MyOwnList
    {
        char data[255];
        //warum geht hier nicht: char data[255] = {'\0',}; ?
        MyOwnList *next;
    };
    
    int main()
    {
        int NumberOfMyListPoints;//Gibt die Größe der Liste an
        MyOwnList *PointInList = NULL; //"Anker"=>Pointer auf den nächsten Wert
        MyOwnList *buffer = NULL; //Zum löschen....
        std :: cout << "Geben sie die Menge an" << std :: endl;
        std :: cin >> NumberOfMyListPoints;
        for (int i = 1; i <= NumberOfMyListPoints; i++)
        {
            MyOwnList *temp = new MyOwnList; //Neue Liste erstellen
            //for (int ii = 0; ii <= 255; ii++) temp->data[i] = '\0'; => bringt auch nix
            std :: cout << "Inhalt: ";
            std :: cin.getline(temp->data,255);
            temp->next = PointInList; //temp.next auf den "Anker" zeigen lassen
            PointInList = temp;        //Anker zeigt auf temp
        }
        //Ja ich weiss die Ausgabe ist rückwärst, für das Beispiel aber nicht schlimm...
        for (int i = 1; i <= NumberOfMyListPoints; i++)
        {
            std :: cout << std :: endl;
            std :: cout << "Inhalt: " << PointInList->data << std :: endl;
            buffer = PointInList;
            PointInList = PointInList->next;
            delete buffer;
        }
        getchar();
    }
    

    Mit std :: cin >> gehts ohne Problme und bei std :: cin.getline() ist das Problem wie gesagt bei der ersten Variable? Warum?
    Die Variable mit '\0' zu füllen brachte nichts(2.for-Schleife) bzw. wollte mein Compiler nicht als korrekt ansehen(struct...-Warum eigentlich)
    Danke



  • Pille456 schrieb:

    Mit std :: cin >> gehts ohne Problme und bei std :: cin.getline() ist das Problem wie gesagt bei der ersten Variable? Warum?

    Vor dem ersten getline() Aufruf stehen noch die Reste der früheren Eingabe (cin>>Number;) im Eingabepuffer - die mußt du erst per ignore() entsorgen, bevor du "richtig" einlesen kannst.

    Die Variable mit '\0' zu füllen brachte nichts(2.for-Schleife) bzw. wollte mein Compiler nicht als korrekt ansehen(struct...-Warum eigentlich)
    Danke

    Struct-Member kannst du nicht bei der Deklaration füllen, sondern erst im Ctor (wenn das überhaupt nötig ist).

    PS: Was spricht eigentlich dagegen, std::string und std::list zu verwenden?



  • Nichts^^
    Im "richtigen" Programm nutze ich auch lieber std::string bzw. list aber das war nur mal zum rumprobieren und besseren verstehen...
    Danke 😃

    p.s. was meinst du mit Ctor?



  • Pille456 schrieb:

    p.s. was meinst du mit Ctor?

    Konstruktor
    (auch structs dürfen einen haben, wenn du ihn benötigst ;))



  • hehe achso 😃


Anmelden zum Antworten