c -显示链表中的一个元素



我想再问一下,为什么我没有通过一个链表来显示我的元素。

我是按照这个问题的一个教程,但虽然它似乎对我来说,我做了视频中所示的一切,它仍然不起作用。

所以我试图显示我的数据从数组字段[N]通过我的结构student_t。我知道,对于一个链表,我需要多个节点,但我只想打印出第一个,看看它是否工作。

我的代码现在看起来是这样的:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
#include <stdlib.h>

#define MAX_NAME_LEN 50
#define N 20
struct student {
unsigned int nummer;
char name[MAX_NAME_LEN];
};
typedef struct student student_t;
int element_vergleich(const void* p1, const void* p2)
{
student_t* sp1, * sp2;
sp1 = (student_t*)p1;
sp2 = (student_t*)p2;
if (sp1->nummer < sp2->nummer)
return -1;
else  if (sp1->nummer > sp2->nummer)
return 1;
else
return 0;
}
void sortiere(student_t* f, int n)
{
qsort(f, n, sizeof(student_t), element_vergleich);
}
struct listelem
{
struct student;
struct listelem *link;
};


int main(void)
{
student_t feld[N] = { {59112, "Peter Lustig"}, {45181, "Fritz Fuchs"}, {38984, "Bibi Blocksberg"},
{87191, "Bernd Brot"}, {58731, "Katie Sommer"}, {75442, "Hein Klug"} };
int n = 7;   // Anzahl benutzter Elemente im Feld
strcpy(feld[6].name, "Linas Dagys");
feld[6].nummer = 50846;
printf("Das Feld wurde fuer %d Elemente deklariert. Davon werden %d Elemente benutzt.n", N, n);

struct listelem* anker = NULL;
anker = (struct listelem*)malloc(sizeof(struct listelem));
anker->nummer;
anker->name;
anker->link = NULL;

printf(" Nummer: %d, Name: %s", anker->nummer, anker->name);


return 0;
}

"…但我只是想打印第一个,看看它是否有效。">

如果要打印任何内容,成员需要在printf之前包含一些内容。

从内存分配开始,对代码进行以下更改:

...
struct listelem* anker = malloc(sizeof(* anker));//no need to cast return of malloc
if(anker)//check for success before using
{
memset(anker, 0, sizeof(* anker));//initialize allocated memory
//anker = (struct listelem*)malloc(sizeof(struct listelem));
//assign values to members before calling printf
anker->nummer = 10;
strcpy(anker->name, "some name");
//anker->link = NULL;

printf(" Nummer: %d, Name: %s", anker->nummer, anker->name);
...
//free memory when finished using it
free(anker);
}
...

(为什么我建议不使用malloc)

输出排序后的feld数组,在printf后面插入以下内容:

sortiere(feld, n);
for(int i=0;i<n;i++)
{
printf(" Nummer: %d, Name: %sn", feld[i].nummer, feld[i].name);
}


对于初学者,这个结构声明

struct listelem
{
struct student;
struct listelem *link;
};

是不正确的。这条线

struct student;

声明结构体的数据成员。

你的意思是

struct listelem
{
student_t student;
struct listelem *link;
};

所以至少这些语句

anker->nummer;
anker->name;

无效。

你可以写

anker = malloc(sizeof(struct listelem));
anker->student = feld[0];
anker->link = NULL;
printf(" Nummer: %d, Name: %sn", anker->student.nummer, anker->student.name)

相关内容

  • 没有找到相关文章

最新更新