链接列表打印在一台计算机上,但不打印在另一台计

时间:2014-11-16 02:13:39

标签: c printing linked-list

我和我的小组目前正在为预约书写一个简单的程序,当我试图打印列表中的数据时,我遇到了一些问题。奇怪的是,如果我用我的计算机运行它,程序可以打印列表中的数据,如果我的组成员试图在他/她的计算机上运行相同的代码,它可以打印直到列表中的最后一个数据然后它坠毁。我们正在使用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

感谢您的时间:)。

1 个答案:

答案 0 :(得分:0)

你的问题是这行代码:

if (head_pointer != NULL) temp->next = head_pointer;

您不需要“if”语句......只需temp->next = head_pointer

如果你没有在列表的最后一个条目中加上“NULL”,你将无法知道你什么时候结束。