Wo ist der Fehler?
-
Mein Programm soll beliebig viele Zahlen vom Benutzer einlesen, ohne dass die Anzahl vorher bekannt ist. Mein Programm liest aber bisher nur eine Zahl ein und macht dann einfach gar nichts mehr. Hat vielleicht hier jemand eine Ahnung, woran das liegt?
# include <stdio.h> # include <stdlib.h> typedef struct LISTENELEMENT { float fZahl; //Nutzdaten struct LISTENELEMENT *pNext; //Struktur braucht Name, damit Zeiger auf sich selbst def werden kann }ZAHL_ELEMENT; typedef struct { ZAHL_ELEMENT* pFirst; int iAnzahl; // erste Element sein soll }ZAHL_LISTE; void deleteFirst(ZAHL_LISTE *pEineZahlenListe) { ZAHL_ELEMENT *pTempZahlenElement; //Zeiger auf Listenelement if(pEineZahlenListe->pFirst==NULL) return; else { pTempZahlenElement=pEineZahlenListe->pFirst->pNext; free (pEineZahlenListe->pFirst); pEineZahlenListe->pFirst=pTempZahlenElement; pEineZahlenListe->iAnzahl--; //dekrementieren der Anzahl } } void deleteList(ZAHL_LISTE *pEineZahlenListe) { while (pEineZahlenListe->pFirst!=NULL) deleteFirst(pEineZahlenListe); } ZAHL_ELEMENT *newElement(ZAHL_ELEMENT Zahl) { ZAHL_ELEMENT *temp; //Zeiger auf ZAHL_ELEMENT temp=(ZAHL_ELEMENT*) malloc (sizeof(ZAHL_ELEMENT)); temp->fZahl=Zahl; return temp; } void initListe(ZAHL_ELEMENT *Liste) { Liste->pNext = NULL; //initialisiert leere Liste } void insertLast(ZAHL_ELEMENT *pEineZahlenListe, ZAHL_ELEMENT *ElementZahl)//Zeiger auf Kopf, Zeiger auf Zahl { while (pEineZahlenListe->pNext==NULL); pEineZahlenListe=pEineZahlenListe->pNext; pEineZahlenListe->pNext=ElementZahl; }ElementZahl->pNext=NULL; int main() { int i=1; float d=1; ZAHL_ELEMENT kopf; //Listenelement mit Namen "kopf" ZAHL_ELEMENT *iTemp; //Zeiger auf Listenelement initListe(&kopf);//leere Liste soll initialisiert werden while (d!=0) { printf("Geben sie eine Zahl ein (0 fuer Ende):"); scanf("%lf",&d); insertLast(&kopf, newElement(d)); } iTemp=kopf.pNext;//Zeiger auf Listenelement kopf while(iTemp) { printf("%d.Zahl: %lf\n",iTemp->fZahl); iTemp=iTemp->pNext; //Zeiger auf das nächste Listenelement i++; } deleteList(&kopf);//Listenelement löschen return 0; }
-
Stephi# schrieb:
Mein Programm liest aber bisher nur eine Zahl ein und macht dann einfach gar nichts mehr.
Wenn das stimmt, und
while (d!=0) { printf("Geben sie eine Zahl ein (0 fuer Ende):"); scanf("%lf",&d); insertLast(&kopf, newElement(d)); }
daß die (korrekte) Einlesemethode ist, kann es nur sein, daß die
Funktion insertLast nie beendet wird.Mal einen Debugger benutzen oder ein paar printf's einbauen, um
zu sehen wo sich das Programm rumtreibt.
-
Kann es vielleicht auch an newElement liegen?
Dass ich falsche Paramter im Header angebe?
-
Hallo,
deine Funktion newElement erwartet ein ZAHL_ELMENT und keinen Integer. Des weiteren hast du in der Funktion insertLast einige Fehler.
void insertLast(ZAHL_ELEMENT *pEineZahlenListe, ZAHL_ELEMENT *ElementZahl)//Zeiger auf Kopf, Zeiger auf Zahl { while (pEineZahlenListe->pNext==NULL); pEineZahlenListe=pEineZahlenListe->pNext;
Der Strichpunkt hinter der while Schleife sollte da wohl nicht sein, desweiteren ist dein Abbruchkriterium falsch. Du willst ja zm nächsten Element gehen. Also solange weiterlaufen wie der pNext-Zeiger nicht null ist.
Güsse
Tobi