我和我的小组目前正在为预约书写一个简单的程序,当我试图打印列表中的数据时,我遇到了一些问题。奇怪的是,如果我用我的计算机运行它,程序可以打印列表中的数据,如果我的组成员试图在他/她的计算机上运行相同的代码,它可以打印直到列表中的最后一个数据然后它坠毁。我们正在使用Windows 8.1 / 7和代码块13.12,我们也尝试使用unix来运行代码,但它会产生分段错误。
以下是我认为与问题相关的代码
typedef struct list
{
int date_start,date_end;
// a_time = appointment time
char a_time[15],what[15],who[15],where[15];
struct list *next;
}L_LIST;
L_LIST *insert (L_LIST *head_pointer, L_LIST data_in)
{
L_LIST *temp = (L_LIST*) malloc (sizeof(L_LIST));
temp->date_start = data_in.date_start;
temp->date_end = data_in.date_end;
strcpy(temp->a_time ,data_in.a_time);
strcpy(temp->what ,data_in.what);
strcpy(temp->who ,data_in.who);
strcpy(temp->where ,data_in.where);
if (head_pointer != NULL) temp->next = head_pointer;
head_pointer = temp;
return(head_pointer);
}
void print_list (L_LIST *head_pointer, int mode, char * s_keyword)
{
int i=1,n_found=0;
int d_start = atoi (s_keyword);
while (head_pointer != NULL) {
if (mode == 1) {
printf(" %d. %d-%d %s %s %s %s\n",i,head_pointer->date_start,\
head_pointer->date_end, head_pointer->a_time,\
head_pointer->what, head_pointer->who, head_pointer->where);
}
else if (mode == 2) {
if (head_pointer->date_start == d_start) {
printf(" Found : %d-%d %s %s %s %s\n",head_pointer->date_start,\
head_pointer->date_end, head_pointer->a_time,\
head_pointer->what, head_pointer->who, head_pointer->where);
n_found++;
}
else if (strcmp(head_pointer->a_time,s_keyword) == 0) {
printf(" Found : %d-%d %s %s %s %s\n",head_pointer->date_start,\
head_pointer->date_end, head_pointer->a_time,\
head_pointer->what, head_pointer->who, head_pointer->where);
n_found++;
}
}
else if (mode == 3) {
FILE* file_pointer = fopen(s_keyword,"a+");
if (file_pointer == NULL) {
file_pointer = fopen (s_keyword,"w+");
fprintf(file_pointer,"\n");
}
fprintf(file_pointer,"%d %d %s %s %s %s\n",head_pointer->date_start,\
head_pointer->date_end, head_pointer->a_time,\
head_pointer->what, head_pointer->who, head_pointer->where);
fclose(file_pointer);
}
head_pointer = head_pointer->next;
i++;
}
}
在print_list功能中,模式1用于将列表中的所有数据打印到屏幕,模式2用于简单搜索功能并在屏幕上打印匹配结果,模式3用于打印数据到txt文件。对于模式2和3,它可以在我的计算机和朋友计算机上正常工作,但是对于模式1,存在问题,它可以在某些计算机上运行。我不确定模式1中代码的问题是什么。或者list.txt输入文件中可能有问题?
1 2 10AM Birthday Sister Home
2 2 10AM Birthday Sister Home
3 2 10AM Birthday Sister Home
4 2 10AM Birthday Sister Home
5 2 10AM Birthday Sister Home
感谢您的时间:)。
答案 0 :(得分:0)
你的问题是这行代码:
if (head_pointer != NULL) temp->next = head_pointer;
您不需要“if”语句......只需temp->next = head_pointer
如果你没有在列表的最后一个条目中加上“NULL”,你将无法知道你什么时候结束。