問題があり、何をすべきかわからない。ポインタ配列に構造体ポインタを追加する
生徒の配列に「新生児」を挿入しようとしています。配列には、作成された構造体へのポインタが含まれています。誰かがエラーを見つけることができますか?これは、学生構造体を配列に追加しますが、特に印刷はしません。
誰かが私を助けることができたら、本当に役に立ちます。 :) PS:あなたはちょうどコードをコピーすることができます。
はここに私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_HASH 10
typedef struct student
{
unsigned int matnr;
char *name;
struct student *next_student;
} Student;
Student **hash_tabelle[MAX_HASH];
void insert_student (unsigned int matnr, char *name)
{
Student *neuer_student = malloc(sizeof(Student));
neuer_student->name = malloc(sizeof(*name)+1);
neuer_student->matnr = matnr;
strcpy(neuer_student->name, name);
neuer_student->next_student = NULL;
// Index im Hash-Array ermitteln
int hash_index = matnr % 10;
if(hash_tabelle[hash_index] == NULL)
{
neuer_student->next_student = hash_tabelle[hash_index];
hash_tabelle[hash_index] = neuer_student;
}
else
{
while(*hash_tabelle[hash_index] != NULL && (((*hash_tabelle[hash_index])->matnr - neuer_student->matnr) <= 0))
hash_tabelle[hash_index] = &(*hash_tabelle[hash_index])->next_student;
neuer_student->next_student = *hash_tabelle[hash_index];
*hash_tabelle[hash_index] = neuer_student;
}
}
void print_hash_tabelle()
{
for(int i = 0; i != MAX_HASH - 1; i++){
printf("%d)\t", i);
hash_tabelle[i] = &(*hash_tabelle[i])->next_student;
for(; hash_tabelle[i] != NULL; hash_tabelle[i] = &(*hash_tabelle[i])->next_student){
printf("%s (%d)", (&(*hash_tabelle[i])->name), (&(*hash_tabelle[i])->matnr));
}
printf("\t");
}
}
int main()
{
unsigned int matnr;
char name[100];
do
{
printf("Matrikelnummer:\t");
scanf("%d", &matnr);
fflush(stdin);
getchar(); // um das \n aus dem Puffer zu kriegen und rauszuschmeißen
printf("Name:\t\t");
fgets(name, 30, stdin);
insert_student(matnr, name);
}
while (matnr != 0);
print_hash_tabelle();
return 0;
}
"のdoesntの仕事は、" 適切な説明ではありません。 *どのように動作しませんか?代わりに何をやろうとしているのですか?あなたは、デバッガを使うなどの基本的なデバッグを自分でやったことがありますか? – kaylum
'malloc(sizeof(* name)+1);' - それは正確に** 2 **文字を割り当てます。 *常に*。 'sizeof'はそれがあなたが思うことはしません。 ['strlen'](http://en.cppreference.com/w/c/string/byte/strlen)を参照してください。 – WhozCraig
'Student ** hash_tabelle [MAX_HASH];' - > 'Student * hash_tabelle [MAX_HASH];' – BLUEPIXY