2014-11-16 67 views
-1

我和我的小組目前正在爲約會書寫一個簡單的程序,當我試圖在列表中打印數據時,我遇到了一些問題。奇怪的是,如果我用我的電腦運行它,程序可以打印列表中的數據,如果我的組成員正在嘗試在他/她的計算機上運行相同的代碼,它可以打印直到列表中的最後一個數據,然後它墜毀。我們使用的是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

@MitchWheat,你知道錯誤先生是什麼嗎?我一直在看代碼,但我找不到錯誤。提前致謝。 – Chamoileon

+0

'if(head_pointer-> date_start == d_start)'??打開執行警告。 – chux

回答

0

你的問題是這行代碼:

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

你不需要的「if」語句......只是temp->next = head_pointer

如果不把「NULL」在你的名單的最後一項,你將無法知道你什麼時候結束。

+0

好的謝謝你的輸入,我會試試:)。 – Chamoileon

+0

它的工作原理!感謝您的意見。謝謝先生,我從來沒有想過終止NULL。 :) – Chamoileon

相關問題