我正在编写一个程序,该程序从文件中获取信息并将其添加到链表中,以及一个函数,用于向链表中添加信息。 我的问题是,在调用
我找不到问题所在。
但是以下内容会导致崩溃:
openBook()
之后调用addContact()
会导致程序崩溃,但分别调用它们则可以正常工作。我找不到问题所在。
openBook()
:打开文件,将数据从文件读入链表中addContact()
:接收信息,将数据保存到链表中#include <stdio.h>
typedef struct node {
char name[50];
char email[50];
char ad[200];
char phone[11];
struct node *next;
} NODE;
NODE *head = NULL;
void openBook()
{
FILE *read = fopen("Book.txt", "r");
if (read == NULL)
{
return;
}
NODE *ite = NULL;
char name[50] = "", email[50] = "", ad[200] = "", phone[11] = "";
if (!feof(read))
{
head = (NODE*)malloc(sizeof(NODE));
fscanf(read, "%s%s%s%s", head->name, head->email, head->ad, head->phone);
}
ite = head;
while (!feof(read))
{
ite->next = (NODE*)malloc(sizeof(NODE));
ite = ite->next;
fscanf(read, "%s%s%s%s", ite->name, ite->email, ite->ad, ite->phone);
}
ite->next = NULL;
fclose(read);
}
void addContact()
{
NODE *ite = head;
if (head != NULL)
{
while (ite->next!=NULL)
ite = ite->next;
ite->next = (NODE*)malloc(sizeof(NODE*));
ite = ite->next;
}
else
{
head = (NODE*)malloc(sizeof(NODE*));
ite = head;
}
fflush(stdin);
printf("Enter name (no space): ");
scanf("%s", ite->name);
fflush(stdin);
printf("Enter email : ");
scanf("%s", ite->email);
fflush(stdin);
printf("Enter address : ");
scanf("%s", ite->ad);
fflush(stdin);
printf("Enter phone : ");
scanf("%s", ite->phone);
fflush(stdin);
ite->next = NULL;
}
void printList()
{
NODE *iterator;
int i;
iterator = head;
while (iterator != NULL)
{
printf("%s\n", iterator->name);
iterator = iterator->next;
}
}
int main()
{
openBook();
addContact();
printList();
return 0;
}
以下内容令人惊叹:
int main()
{
addContact();
printList();
return 0;
}
但是以下内容会导致崩溃:
int main()
{
FILE *read = fopen("Book.txt", "r");
fclose(read);
addContact();
printList();
return 0;
}
malloc()
。 - iBugfflush(stdin)
。 - iBugwhile(!feof())
是一个不好的想法 - iBugstdlib.h
库。如果你在代码中使用了malloc()
但没有包含这个库,编译器会给出一个警告。请检查并添加相应的头文件。 - iBug