Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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;

}

Geschrieben (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 von Klotzkopp
Geschrieben

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

Geschrieben

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;

}

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...