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