Probleme mit dynamischem Speicher



  • Hallo

    also erstmal bin ich noch ein totaler blutiger Anfänger was das Programmieren anbelangt.
    Jedenfalls hab ich Versucht ein Programm zu erstellen mit dem man Studenten mit der Matrikelnummer in einen dynamischen Speicher einfügt und später wieder abfragt.
    folgend hab ich den Quelltext stehen - leider funktioniert es nicht.
    ich würde mich freuen wenn jemand mal drüber kucken könnte und mich aufklären könnte woran es liegt,
    Vielen Dank im Voraus.

    */
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_HASH 10
    #define MAX 20

    // Struktur

    struct student {
    char *name;
    int matrikelnr;
    struct student *next;
    };

    // Prozedur insert_student

    void insert_student(int a, char *name, struct student*hash[]) {
    struct student *p;
    int i = a%10;

    p=malloc(sizeof(struct student));
    p->name = malloc(strlen(name)+1);

    strcpy( p->name, name);
    p->matrikelnr=a;
    p->next=hash[i];
    hash[i]=p;

    }

    // Prozedur print_student

    void print_student (int a, struct student*hash[]){
    struct student *p;
    int i = a%10;

    for (p=hash[i];p!=NULL;){
    if (p->matrikelnr == a){
    printf ("NAME: %s\n", p->name);
    return;
    }
    p = p->next;
    }
    printf("\nEs wurde kein Eintrag gefunden!\n");

    }

    // main Funktion

    int main (void){
    struct student *hash[MAX_HASH];
    char name;
    int matrikelnr;
    int a = 0;

    if (a<10){
    a++;
    hash[a]=0;
    }
    printf("Studenten-Matrikelnummer\n\n");
    printf("Fuer Ausgabe 0 eingeben\n");
    printf("Eingabe\n");

    do{
    printf("Matrikelnummer: ");
    scanf("%d", &matrikelnr);

    if(matrikelnr != 0){
    printf("Name des Studenten: ");
    fflush(stdin);
    fgets(name, MAX, stdin);

    insert_student(matrikelnr, name,hash);
    }
    printf("\n");
    }
    while(matrikelnr != 0);

    printf("Zum Beenden des Programms 0 eingeben\n");
    printf("Ausgabe\n");
    printf("Matrikelnummer eingeben um Name des Studenten abzurufen:\n");

    do{
    printf("\nMatrikelnummer : ");
    scanf("%d", &matrikelnr);
    printf("\n");

    if(matrikelnr != 0)
    print_student(matrikelnr,hash);

    }
    while(matrikelnr != 0);

    return 0;
    }



  • MCeXoDuS schrieb:

    Hallo

    also erstmal bin ich noch ein totaler blutiger Anfänger was das Programmieren anbelangt.
    Jedenfalls hab ich Versucht ein Programm zu erstellen mit dem man Studenten mit der Matrikelnummer in einen dynamischen Speicher einfügt und später wieder abfragt.
    folgend hab ich den Quelltext stehen - leider funktioniert es nicht.
    ich würde mich freuen wenn jemand mal drüber kucken könnte und mich aufklären könnte woran es liegt,
    Vielen Dank im Voraus.

    */
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_HASH 10
    #define MAX 20
    
    // Struktur
    
    struct student {
        char *name;
        int matrikelnr;
        struct student *next;
    };
    
    // Prozedur insert_student
    
    void insert_student(int a, char *name, struct student*hash[]) {
        struct student *p;
        int i = a%10;
    
        p=malloc(sizeof(struct student));
        p->name = malloc(strlen(name)+1);
    
        strcpy( p->name, name);
        p->matrikelnr=a;
        p->next=hash[i];
        hash[i]=p;
    
    }
    
    // Prozedur print_student
    
    void print_student (int a, struct student*hash[]){
        struct student *p;
        int i = a%10;
    
        for (p=hash[i];p!=NULL;){
            if (p->matrikelnr == a){
                printf ("NAME: %s\n", p->name);
                return;
            }
            p = p->next;
        }
        printf("\nEs wurde kein Eintrag gefunden!\n");
    
    }
    
    // main Funktion
    
    int main (void){
        struct student *hash[MAX_HASH];
        char name;
        int matrikelnr;
        int a = 0;
    
        if (a<10){
            a++;
            hash[a]=0;
        }
        printf("Studenten-Matrikelnummer\n\n");
        printf("Fuer Ausgabe 0 eingeben\n");
        printf("Eingabe\n");
    
        do{
            printf("Matrikelnummer: ");
            scanf("%d", &matrikelnr);
    
            if(matrikelnr != 0){
                printf("Name des Studenten: ");
                fflush(stdin);
                fgets(name, MAX, stdin);
    
                insert_student(matrikelnr, name,hash);
            }
            printf("\n");
        }
        while(matrikelnr != 0);
    
        printf("Zum Beenden des Programms 0 eingeben\n");
        printf("Ausgabe\n");
        printf("Matrikelnummer eingeben um Name des Studenten abzurufen:\n");
    
        do{
            printf("\nMatrikelnummer : ");
            scanf("%d", &matrikelnr);
            printf("\n");
    
            if(matrikelnr != 0)
                print_student(matrikelnr,hash);
    
        }
        while(matrikelnr != 0);
    
        return 0;
    }
    

    Vielen Dank für die Code-Tags!

    Edit:
    Funktioniert nicht ist kein Fehler.
    Welches Verhalten erwartest Du wo? Welches Verhalten tritt stattdessen auf?



  • Schau mal hier: http://www.c-plusplus.net/forum/280074

    Besonders die ersten beiden Posts.



  • also hab den Fehler gefunden, hab im Hauptprogramm bei der Variablendeklaration was falsch gemacht und zwar hab ich name als char und nicht als string angegeben


Anmelden zum Antworten