gpt4 book ai didi

c - 保存到c中的文件

转载 作者:行者123 更新时间:2023-11-30 17:46:36 24 4
gpt4 key购买 nike

我有一个代码,它将位于另一个双向链表内的双向链表中的学生编号(stdnum)保存到文件中。我注意到有时它会打印“(null)”和额外的空格。我该如何避免这些?这是我的代码:

typedef struct frn{ //structure for friend
char stdnum[20];
struct frn *next;
struct frn *prev;
}friend;

typedef struct std{ //structure for student
char stdnum[20];
char name[20];
char course[10];
struct frn *friendh;
struct frn *friendt;
struct std *next;
struct std *prev;
}student;



FILE *fp1;
student *y = h->next;
friend *y1;
fp1 = fopen("friends.txt", "w");
if(y != t){
while(y != t){
y1 = y->friendh;
while(y1 != NULL){
fprintf(fp1, "%s\n", y1->prev->stdnum);
y1 = y1->next;
}
y = y->next;
}
}
fclose(fp1);

最佳答案

阅读您的评论后,这就是为什么它打印 NULL:

fprintf(fp1, "%s\n", y1->prev->stdnum)

当你位于链表的第一个节点(y1)时(第一次进入内部 while 时)会发生什么?当您执行 y1->prev->stdnum 时,您正在访问随机内存,或者如果您已将链接列表初始化为空值的 NULL 值。这就是打印出来的内容。

然后在打印 null 后立即执行 y1 = y1->next。这会将您带到链接列表的第二个节点。

现在,当你这样做时:

fprintf(fp1, "%s\n", y1->prev->stdnum)

现在您正在打印第一个节点的“stdnum”值,您在注释中提到的该值是空的。所以 fprintf 打印出一个空白区域。

您能否验证 null空白 是否彼此相邻?

你可以这样修复它:

typedef struct frn{ //structure for friend
char stdnum[20];
struct frn *next = NULL;
struct frn *prev = NULL;
}friend;

fp1 = fopen("friends.txt", "w"); // I would highly recommend, you put an error check here to verify if the file opened or not
if(y != t){
while(y != t){
y1 = y->friendh;
while(y1 != NULL){
if(y1->prev==NULL){
y1 = y1->next;
}else{
fprintf(fp1, "%s\n", y1->prev->stdnum);
y1 = y1->next;
}
}
y = y->next;
}
}
fclose(fp1);

关于c - 保存到c中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19205136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com