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 anzulegenDazu 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*6richtig 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.