Ausgabeproblem struct



  • Hallo,

    ich habe ein Poblem bei folgender Ausgabe:

    scanf("%i",&eingabe);
    
    			if (eingabe > 0)
    			{
    				ptr_laufzeiger = ptr_listenanker;
    				i = 1;
    				while (i <= eingabe)
    				{
    					if (i == eingabe)
    					{
    
    							printf("\n\n\tNr. %i\n\t 1.: %i\n\t 2.: %i\n\t 3.: %i\n\t 4.: %i\n\t 5.: %i\n\t 6.: %i\n",
    							   ptr_laufzeiger->nummer,
    							   ptr_laufzeiger->werte[0],
    							   ptr_laufzeiger->werte[1],
    							   ptr_laufzeiger->werte[2],
    
    ptr_laufzeiger->werte[3],
    							   ptr_laufzeiger->werte[4],
    							   ptr_laufzeiger->werte[5]);
    						getch();   
    					}
    

    Die Eingabe dieser Werte nehme ich hier vor:

    scanf("%i",&eingabe_anzahl);
    
    		if (eingabe_anzahl > 0)
    		{
    			if (ptr_listenanker == NULL)
    			{
    				ptr_laufzeiger = new structwert;
    				ptr_listenanker = ptr_laufzeiger;
    			}
    			else
    			{
    				ptr_laufzeiger = ptr_listenanker;
    			}
    
    			while (i < eingabe_anzahl)
    			{
    				printf("\n\n\t Geben Sie die Nummer ein: ");
    				fflush(stdin);
    				scanf("%i",&ptr_laufzeiger->nummer);
    				n = 0;
    				while (n <= 5)
    				{
    					printf("\tWert: ");
    					scanf("%i", &ptr_laufzeiger->werte[k]);
    					k++;
    					n++;
    				}
    				if (i == eingabe_anzahl)
    				{
    					ptr_laufzeiger->ptr = NULL;
    				}
    				else
    				{
    					ptr_alt = ptr_laufzeiger;
    					ptr_alt->ptr = ptr_laufzeiger;
    				}
    				i++;
    			}
    
    		}
    

    Das Problem ist das mit dieser Ausgabe immer nur die erste Werte die ich eingetragen habe angezeigt. Die anderen nicht. Nur ich weiss nicht woran das liegt.



  • Hallo C-123,

    du hast ein paar Fehler in deiner Einleseroutine:
    - k ist nicht initialisiert, bzw. wird k immer größer, müßte aber
    zwischen 0..5 liegen.
    - du vergisst neue Elemente in deiner Liste anzulegen

    Dazu kommt dann noch, dass du anscheinend C++ programmierst.
    In C gibt es kein new!

    Hier mal ein Vorschlag, wie du das lösen könntest:

    #include <iostream>
    
    using namespace std;
    
    struct werte_t {
        int nr;
        int w[6];
        struct werte_t *next;
    
        void print();
    };
    
    void werte_t::print() {
        cout << "Nummer: " << nr << endl;
        for (int i=0; i<6; ++i) cout << "  Werte " << i+1 << ": " << w[i];
        cout << endl;
        if (next) (*next).print();
    }
    
    static int einlesen(werte_t **werte) {
        cout << "Anzahl Werte: ";
        int num;
        cin >> num;
    
        werte_t **cur = werte;
    
        for (int i=0; i<num; ++i) {
            werte_t *w = new werte_t;
            cout << "Nummer: ";
            cin >> w->nr;
    
            for (int j=0; j<6; ++j) {
                cout << "  Wert " << j+1 << ": ";
                cin >> w->w[j];
            }
            *cur = w;
            cur = &w->next;
        }
        return num;
    }
    
    int main(void) {
        werte_t *liste = NULL;
    
        int num = einlesen(&liste);
    
        liste->print();
        return 0;
    }
    

    Gruß mcr

    PS: das oben angegebene Programm ist in C++.

    EDIT: die Liste muss noch gelöscht werden!



  • [cpp]scanf("%i",&eingabe_anzahl);

    if (eingabe_anzahl > 0)
    {
    if (ptr_listenanker == NULL)
    {
    ptr_laufzeiger = new structwert;
    ptr_listenanker = ptr_laufzeiger;
    }
    else
    {
    ptr_laufzeiger = ptr_listenanker;
    }

    while (i < eingabe_anzahl)
    {
    printf("\n\n\t Geben Sie die Nummer ein: ");
    fflush(stdin);
    scanf("%i",&ptr_laufzeiger->nummer);
    n = 0;
    while (n <= 5)
    {
    printf("\tWert: ");
    scanf("%i", &ptr_laufzeiger->werte[k]);
    k++;
    n++;
    }
    if (i == eingabe_anzahl)
    {
    ptr_laufzeiger->ptr = NULL;
    }
    else
    {
    ptr_alt = ptr_laufzeiger;
    ptr_laufzeiger = new structwer;
    ptr_alt->ptr = ptr_laufzeiger;
    }
    i++;
    }

    }[/cpp]
    Das mit dem neuen Element habe ich damit erledigt und k ist weiter oben initialisiert.



  • Angenommen, du hast k mit 0 initialisiert, dann ist am Ende der
    while-Schleife "while (n<=5)" k = n*6

    richtig wäre also:

    n = k = 0;
    while (n<=5) {
        printf("\tWert: ");
        scanf("%i", &ptr_laufzeiger->werte[k]);
        k++;
        n++;
    }
    

    Wobei ich nicht verstehe, warum du k und n hast.
    Dies sollte reichen:

    n = 0;
    while (n<6) {
        printf("\tWert: ");
        scanf("%i", &ptr_laufzeiger->werte[n++]);
    }
    

    fflush(stdin) ist nicht Ansi-C. Such mal hier im Forum, was
    man an dessen Stelle schreibt.

    Gruß mcr

    PS: meine Einleseroutine gefiel dir nicht?



  • Doch gefallen hat mir dein Quellcode schon, nur die meisten Dinge davon hatte ich noch nicht und deswegen probier ich lieber meinen eigenen Quellcode zu korrigieren. 😉


Anmelden zum Antworten