darkyzero Geschrieben 30. Januar 2013 Geschrieben 30. Januar 2013 ich soll ein liste erstellen für ein modul nur komme ich nicht weiter wo liegt der fehler ware nett wenn mir jemand helfen konnte #include <stdio.h> #include <string.h> #include <stdlib.h> struct TStudListe { long matrikelnummer; int credit_points; struct TStudListe *next; }; struct TStudListe *next = NULL; struct TStudListe *anfang = NULL; void anhaengen(long m, int c) { struct TStudListe *zeiger; if(anfang == NULL) { if((anfang =malloc(sizeof(struct TStudListe))) == NULL) { printf( "Kein Speicherplatz vorhanden für anfang\n"); return; } strcpy(anfang->matrikelnummer, m); strcpy(anfang->credit_points, c); anfang->next=NULL; } else { zeiger=anfang; while(zeiger->next != NULL) zeiger=zeiger->next; if((zeiger->next = malloc(sizeof(struct TStudListe))) == NULL) { printf(stderr,"Kein Speicherplatz für das letzte Element\n"); return; } zeiger=zeiger->next; /* zeiger auf neuen Speicherplatz */ strcpy(matrikelnummer, m); strcpy(zeiger->credit_points, c); zeiger->next=NULL; } } /* Funktion zum Löschen einer Datei */ void loesche(long *wen) { struct TStudListe *zeiger, *zeiger1; if(anfang != NULL) { if(strcmp(anfang->matrikelnummer,wen) == 0) { zeiger=anfang->next; free(anfang); anfang=zeiger; } else { zeiger=anfang; while(zeiger->next != NULL) { zeiger1=zeiger->next; if(strcmp(zeiger1->name,wen) == 0) { zeiger->next=zeiger1->next; free(zeiger1); break; } zeiger=zeiger1; } } } else printf("Es sind keine Daten zum Loeschen vorhanden!!!\n"); } /* Funktion zum Ausgeben der Dateien */ void ausgabe(void) { struct TStudListe *zeiger = anfang; printf("||=======================================================||\n"); printf("|%10cmatrikelnummer%10c |credit_points|"); printf("||=======================================================||\n"); while(zeiger != NULL) { printf("|%12ld,| %02d|"\n", zeiger->matrikelnummer,zeiger->credit_points); printf("|---------------------------------------------------------|\n"); zeiger=zeiger->next; } } /* Funktion zur Eingabe der Daten */ void eingabe(void) { int credit_points; long matrikelnummer; printf("matrikelnummer: "); scanf("%ld",&matrikelnummer); printf("credit_points"); scanf("%ld",&credit_points); getchar(); anhaengen(n, c); } } int main(void) { int wahl; long matrikelnummer; do { printf("\n1 : Eingabe\n"); printf("2 : Ausgabe\n"); printf("3 : Namen loeschen\n"); printf("9 : Ende\n"); printf("Ihre Wahl : "); scanf("%d",&wahl); getchar(); switch(wahl) { case 1 : eingabe(); break; case 2 : ausgabe(); break; case 3 : printf("matrikelnummerzum Loeschen: "); scanf("%ld",&matrikelnummer); loesche(strtok(matrikelnummer, "\n")); break; case 9 : break; default: printf("Falsche Eingabe!!!\n"); } } while(wahl != 9); return EXIT_SUCCESS; } Zitieren
Klotzkopp Geschrieben 30. Januar 2013 Geschrieben 30. Januar 2013 Es ist ziemlich unhöflich, einfach einen Batzen Code hinzuklatschen, ohne Code-Tags und ohne irgendeine Erklärung, was das Problem ist. Wie äußert sich denn "der Fehler"? Zitieren
lilith2k3 Geschrieben 30. Januar 2013 Geschrieben 30. Januar 2013 Wer programmiert denn sowas heutzutage noch selbst? Wenn Du C++ nutzt, dann wirf mal einen Blick in list - C++ Reference oder für C SGLIB - A Simple Generic Library for C. Und für den Rest, bitte Code-Tags benutzen und das Problem genau formulieren :] Zitieren
darkyzero Geschrieben 30. Januar 2013 Autor Geschrieben 30. Januar 2013 (bearbeitet) es tut mir leidt wollte nicht unhöflich sein . ich habe Jetzt geschaft das er wenigst schon die daten speichert nun ist aber leider mein problem das er nicht den Befehl löschen anwende auf bestimmte matrikelnummer. ich hoffe ich hab es dies mal besser ein geschrankt. #include <stdio.h> #include <string.h> #include <stdlib.h> struct TStudListe { long matrikelnummer; int credit_points; struct TStudListe *next; }; struct TStudListe *next = NULL; struct TStudListe *anfang = NULL; void anhaengen(long m, int c) { struct TStudListe *zeiger; if(anfang == NULL) { if((anfang =malloc(sizeof(struct TStudListe))) == NULL) { fprintf(stderr, "Kein Speicherplatz vorhanden " "für anfang\n"); return; } anfang->matrikelnummer = m; anfang->credit_points = c; anfang->next=NULL; } else { zeiger=anfang; while(zeiger->next != NULL) zeiger=zeiger->next; if((zeiger->next = malloc(sizeof(struct TStudListe))) == NULL) { fprintf(stderr,"Kein Speicherplatz für das " "letzte Element\n"); return; } zeiger=zeiger->next; zeiger->matrikelnummer=m; zeiger->credit_points=c; zeiger->next=NULL; } } [COLOR="#B22222"]/* Funktion zum Löschen einer Datei */[/COLOR] void loesche(long wen ) { struct TStudListe *zeiger, *zeiger1; [COLOR="#B22222"] Hier ist das Problem das er es irgend wie nicht ausführt[/COLOR] if(anfang != NULL) { if(anfang->matrikelnummer,wen == 0) { zeiger=anfang->next; free(anfang); anfang=zeiger; } else { zeiger=anfang; while(zeiger->next != NULL) { zeiger1=zeiger->next; if(zeiger1->matrikelnummer,wen == 0) { zeiger->next=zeiger1->next; free(zeiger1); break; } zeiger=zeiger1; } } } else printf("Es sind keine Daten zum Loeschen vorhanden!!!\n"); } [COLOR="#B22222"]/* Funktion zum Ausgeben der Dateien */[/COLOR] void ausgabe(void) { struct TStudListe *zeiger = anfang; while(zeiger != NULL) { printf(" matrikelnummer %ld,|credit_points:%d|\n", zeiger->matrikelnummer,zeiger->credit_points); printf("|---------------------------------------------------------|\n"); zeiger=zeiger->next; } } [COLOR="#B22222"]/* Funktion zur Eingabe der Daten */[/COLOR] void eingabe(void) { int credit; long matrikelnummer; printf("matrikelnummer: "); scanf("%ld",&matrikelnummer); printf("credit_points:"); scanf("%d",&credit); getchar(); anhaengen(matrikelnummer, credit); } int main(void) { int wahl; long matrikeln; do { printf("\n1 : Eingabe\n"); printf("2 : Ausgabe\n"); printf("3 : matrikelnummer loeschen\n"); printf("9 : Ende\n"); printf("Ihre Wahl : "); scanf("%d",&wahl); getchar(); switch(wahl) { case 1 : eingabe(); break; case 2 : ausgabe(); break; case 3 : printf("matrikelnummer zum Loeschen: "); [COLOR="#B22222"]Oder hier muss das Problem liegen[/COLOR] scanf("%ld",&matrikeln); loesche(matrikeln); break; case 9 : break; default: printf("Falsche Eingabe!!!\n"); } } while(wahl != 9); return EXIT_SUCCESS; } Bearbeitet 30. Januar 2013 von Klotzkopp Zitieren
Klotzkopp Geschrieben 30. Januar 2013 Geschrieben 30. Januar 2013 Ich hab mir erlaubt, deinen Code in Code-Tags einzufügen. Bitte beim nächsten Mal selbst machen. Zum Problem: Was meinst du, bewirkt das: if(anfang->matrikelnummer,wen == 0) Zitieren
darkyzero Geschrieben 30. Januar 2013 Autor Geschrieben 30. Januar 2013 wenn die matrikelnummer = 0 ist dann löscher es sollte nicht da stehen if(anfang->matrikelnummer,wen == matrikeln) Zitieren
Klotzkopp Geschrieben 30. Januar 2013 Geschrieben 30. Januar 2013 Also ich kenne das so: if(a == [/code] Du schreibst: [code]if(a,b == c) Weißt du, was das Komma an dieser Stelle bewirkt? Für welche a, b und c erwartest du, dass die Bedingung erfüllt ist? Zitieren
darkyzero Geschrieben 30. Januar 2013 Autor Geschrieben 30. Januar 2013 if(anfang->matrikelnummer == wen) so gehst vielen dank für deinen tipp und helfe. entschuldige noch mal für meine ersten post Zitieren
darkyzero Geschrieben 30. Januar 2013 Autor Geschrieben 30. Januar 2013 eine Frage hab ich noch ich soll mit Bubble sort noch die Matrikelnummer sorten . nur weis ich nicht genau wie ich das einbinden soll hab den grund quell-code schon gefunden nur bringt der mich nicht weiter. void swap(int* a, int* ; void bubble(int a[], int len) { int i, bound; for (bound = len; bound > 0; bound--) { for (i=1; i < bound; i++) { if (a[i-1] > a[i]) swap(&a[i-1], &a[i]); } } } void swap(int* a, int* { int tmp = *a; *a = *b; *b = tmp; }[/code] ware nett wenn mir wer weiter helft Zitieren
darkyzero Geschrieben 31. Januar 2013 Autor Geschrieben 31. Januar 2013 ich hab jetzt mal probieret das problem mehr deutlich zu machen [COLOR="#B22222"]/* Fkt. - Anzahl der Listenelemente */ int number_elems(void)[/COLOR] { int i=0; struct TStudListe *zeiger= anfang; while (zeiger != NULL) { i++; zeiger=zeiger->next; } printf("\n\n %d Listenelemente sind vorhanden \n\n", i); return i ; } [COLOR="#B22222"]/* Fkt. - sortierung */[/COLOR] void bubblesort(struct TStudListe*zeiger, int length) { int i, j; for (i = 0; i < length -1; ++i) { for (j = 0; j < length - i - 1; ++j) { if (array[j] > array[j + 1]) { int tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } int main(void) { int wahl; long matrikeln; int anzahl; do { printf("\n1 : Eingabe\n"); printf("2 : Ausgabe\n"); printf("3 : matrikelnummer zu loeschen\n"); printf("4 : Sortieren\n"); printf("9 : Ende\n"); printf("Ihre Wahl : "); scanf("%d",&wahl); getchar(); switch(wahl) { case 1 : eingabe(); break; case 2 : ausgabe(); break; case 3 : printf("matrikelnummer zum Loeschen: "); scanf("%ld",&matrikeln); loesche(matrikeln); break; case 4: anzahl=number_elems(); void bubblesort(struct TStudListe*zeiger,int anzahl); i[COLOR="#B22222"]ch wirde gern meine struct sortieren nach der matermatrikelnummer[/COLOR] break; case 9 : break; default: printf("Falsche Eingabe!!!\n"); } } while(wahl != 9); return EXIT_SUCCESS; } Zitieren
Klotzkopp Geschrieben 31. Januar 2013 Geschrieben 31. Januar 2013 Es bringt nichts, wenn du dir Code von irgendwoher zusammenkopierst. Du musst verstehen, was du da tust. Dein Bubblesort-Code ist für Arrays, den kannst du nicht so ohne weiteres für verkette Listen verwenden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.