000
13.06.2006, 15:23 Uhr
~Stephi_
Gast
|
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 jemand eine Ahnung, woran das liegt?
Code: |
# include <stdio.h> # include <stdlib.h>
typedef struct LISTENELEMENT { //Struktur für ein Listenelement; Struktur braucht Name, damit Zeiger auf sich selbst def werden kann float fZahl; //Nutzdaten struct LISTENELEMENT *pNext; //Struktur braucht Name, damit Zeiger auf sich selbst def werden kann }ZAHL_ELEMENT;
typedef struct { ZAHL_ELEMENT* pFirst;//Erzeugung einer Liste; enth Zeiger auf Listenelement, welches das int iAnzahl; // erste Element sein soll }ZAHL_LISTE;
void deleteFirst(ZAHL_LISTE *pEineZahlenListe) { ZAHL_ELEMENT *pTempZahlenElement; //Zeiger auf Listenelement if(pEineZahlenListe->pFirst==NULL) //überprüfen, ob leere Liste übergeben wird return; else { pTempZahlenElement=pEineZahlenListe->pFirst->pNext; //temp. Zeiger initialisieren auf 2.Element
free (pEineZahlenListe->pFirst);//freigeben des dyn.angeforderten Speichers für das 1.Listenelement pEineZahlenListe->pFirst=pTempZahlenElement;//einhängen des ehem. 2. als neues 1. Listenelement pEineZahlenListe->iAnzahl--; //dekrementieren der Anzahl } }
void deleteList(ZAHL_LISTE *pEineZahlenListe) { while (pEineZahlenListe->pFirst!=NULL)//überprüfen, ob leere Liste übergeben wurde 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; //eingegebene Zahl wird in ZAHL_ELEMENT als fZahl gespeichert 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); //bis bei NULL angelangt, was dem Ende der Liste entspricht pEineZahlenListe=pEineZahlenListe->pNext; //Ende gefunden, pNext auf ZAHL_ELEMENT pEineZahlenListe->pNext=ElementZahl; //Eingegebene Zahl wird "übergeben" }ElementZahl->pNext=NULL;//Ende gesetzt
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;
}
|
|