Listen ( Achtung: Schwer! :D )
-
Hallo Ihr Lieben
Probleme bei loadlist Funktion
kann sich irgendjemand geschultes mal kurz der Aufgabe widmen
-> lädt nur 1 Element#include <stdio.h> #include <stdlib.h> typedef struct item { int nr; int data; char daten[200000]; struct item *next; }; item* START = NULL; // Zeiger auf den Anfang der Liste int cnt = 0; void print_list_2(void); void getlistitem() { int cnt=0; int suche=0; printf("Zu suchende Daten:"); fflush(stdin); scanf("%d",&suche); printf("\n\n"); item *DUMMY; DUMMY = START; // DUMMY soll auf den Listenanfang zeigen while (DUMMY) // "solange DUMMY nicht auf NULL zeigt" { if(DUMMY->data==suche) { printf("Elementnummer:%d\nElementdaten: %d\n",DUMMY->nr,DUMMY->data); cnt++; } DUMMY = DUMMY -> next; } if(!cnt) printf("Kein solches Element vorhanden!\n"); system("pause"); } void do_einfuegen_anfang(void) { // neues Element im Speicher anlegen item *NEU; NEU = (item*)malloc(sizeof(item)); // Daten einlesen printf("Daten fuer neues Element eingeben:"); int i; scanf("%d",&i); // Daten in Element eintragen NEU->nr = ++cnt; NEU->data = i; // ausführlich: (*NEU).data = i; // Einketten in Liste NEU->next = START; // next-Zeiger des neuen Elementes soll dahin zeigen wo der START-Zeiger zeigt START = NEU; // START-Zeiger soll auf neues Element zeigen } void do_loeschen_anfang(void) { if (!START) // ausführlich: (START == NULL) { printf("aus einer leeren Liste kann nicht geloescht werden!\n\n"); system("pause"); return; } item *X; // Merken was das erste Element war X = START; START = START -> next; // auf zweites Element zeigen lassen free(X); // Speicher des "alten" ersten Elementes wieder freigeben } void loadlist(void) { FILE *daten; daten= fopen ("C:\\Dokumente und Einstellungen\\blb34611\\Eigene Dateien\\Programmierung\\Aufgabenblatt 12\\daten.txt","rb"); item *DUMMY; item *hilf; DUMMY=(item*) malloc(sizeof(item)); while(fread(DUMMY,sizeof(item),1,daten)!=NULL) { if(START==NULL) { START=DUMMY; DUMMY->next=NULL; } else { hilf=START; while(!hilf->next) { hilf=hilf->next; } hilf->next=DUMMY; DUMMY->next=NULL; } } fclose(daten); } void savelist(void) { FILE *daten; daten= fopen ("C:\\Dokumente und Einstellungen\\blb34611\\Eigene Dateien\\Programmierung\\Aufgabenblatt 12\\daten.txt","wb"); item *DUMMY; DUMMY = START; // DUMMY soll auf den Listenanfang zeigen while (DUMMY) // "solange DUMMY nicht auf NULL zeigt" { fwrite(DUMMY,sizeof(item),1,daten); DUMMY = DUMMY -> next; } fclose(daten); } void do_count(void) { int anzahl = 0; item *DUMMY; DUMMY = START; // DUMMY soll auf den Listenanfang zeigen while (DUMMY) // "solange DUMMY nicht auf NULL zeigt" { anzahl++; DUMMY = DUMMY -> next; } printf("Anzahl der Listenelemente: %d\n",anzahl); system("pause"); } void last_item(void) { if (!START) // ausführlich: (START == NULL) { printf("Liste ist leer!\n\n"); system("pause"); return; } // Daten des letzten Elementes ausgeben lassen item *DUMMY; DUMMY = START; // DUMMY soll auf den Listenanfang zeigen while (DUMMY->next) // ausführlich: (DUMMY->next != NULL) DUMMY = DUMMY -> next; // DUMMY zeigt jetzt auf das letzte Element printf("Daten des letzten Elementes: %d\n",DUMMY->data); system("pause"); } void menue(void) { char s; do { print_list_2(); printf("\n\nAuswahl:\n------------------------------\n"); printf("a - neues Element am Anfang einfuegen\n"); printf("e - neues Element am Ende einfuegen\n"); printf("i - neues Element an Position einfuegen\n"); printf("l - Element am Anfang loeschen\n"); printf("s - Datensuche\n"); printf("c - Anzahl der Elemente ausgeben\n"); printf("z - Daten des letzten Elementes ausgeben\n"); printf("p - Speichern der Liste\n"); printf("r - Laden der Liste\n"); printf("b - Programm beenden\n"); printf("\n\nIhre Wahl-->"); fflush(stdin); scanf("%c",&s); fflush(stdin); switch (s) { case 'r': loadlist(); break; case 'p': savelist(); break; case 'a': do_einfuegen_anfang(); break; case 'e': //do_einfuegen_ende(); break; case 's': getlistitem(); break; case 'i': //do_einfuegen_pos(); break; case 'l': do_loeschen_anfang(); break; case 'c': do_count(); break; case 'z': last_item(); break; } } while (s != 'b'); } int main (void) { menue(); return 0; } void print_list_2(void) { system("cls"); // Bildschirm löschen printf("Liste:\n------------------------------\n"); item *dummy = NULL; dummy = START; int pos = 0; if (!dummy) printf("keine Elemente in der Liste!\n"); printf("START\n"); while(dummy) { printf("EL-%02d",dummy->nr); if (dummy->next) printf(" --> "); else printf(" --> NULL "); dummy = dummy->next; } printf("\n"); dummy=START; while(dummy) { printf("[%03d] ",dummy->data); dummy = dummy->next; } printf("\n"); }
-
void loadlist(void){ ... while( :warning: ! :warning: hilf->next) { hilf=hilf->next; } ... }
davon mal abgesehen ist das teil eine absolute katastrophe entweder du fügst die dinger am anfang ein oder du merkst dir das letzte aber das immer wieder neu zu suchen, nene das ist total madig...