2013-05-05 35 views
1

編寫此程序時遇到了一些問題。在列表中搜索時,只能顯示第一個結果。即使有其他數據符合要求,程序也不能顯示多個結果。在C中的單個鏈表中搜索

第二個問題是,當用戶嘗試按名稱搜索時會出現運行時錯誤。

感謝您的幫助。

下面是代碼:

int namesearch(LIST *list,STUDENT **pPre,STUDENT **pLoc,char target[]){ 
    int n; 
    *pLoc = list->head; 
    for (;*pLoc!=NULL && n!=0;){ 
     n=strncmp(target,(*pLoc)->name,MAXNUM); 
     *pPre = *pLoc; 
     *pLoc = (*pLoc)->next; 
     printf("1"); 
    } 
    if(*pPre==NULL) 
     return 0; 
    else{ 
     printf("2"); 
     if (n==0){ 
      printf("%s%d | %-18s| %0.1f | %0.1f",RESULT,(*pLoc)->sid,(*pLoc)->name,(*pLoc)->ca,(*pLoc)->exam); 
      return 1; 
      fflush(stdin);getch(); 
     } 
     else 
      printf("3"); 
      return 0; 
    } 
} 
+0

對於您的第一個問題,爲什麼不停止第一場比賽? – 2013-05-05 13:37:10

+1

(我建議你和同學在一起:http://stackoverflow.com/questions/16384641/looping-through-recursive-list-in-c) – 2013-05-05 13:39:17

+0

嗯..對不起,我不能得到你說的。完整的代碼已發佈,或者它可以幫助您更多地瞭解我正在嘗試做什麼。不管怎麼說,還是要謝謝你。 – user2351825 2013-05-05 14:55:27

回答

0

首先,你沒有得到一個以上結果的原因是因爲環的結構。以下更改可以打印結果。

int namesearch(LIST *list,STUDENT **pPre,STUDENT **pLoc,char target[]){ 
    int n; 
    int found = 0; 
    *pLoc = list->head; 
    for (;*pLoc!=NULL;){ 
     n=strcmp(target,(*pLoc)->name); 
     if (n==0){ 
       printf("%s%d | %-18s| %0.1f | %0.1f",RESULT,(*pLoc)->sid,(*pLoc)->name,(*pLoc)->ca,(*pLoc)->exam); 
      found++; 
      fflush(stdin);getch(); 
     } 
     *pPre = *pLoc; 
     *pLoc = (*pLoc)->next; 
    } 

    return found; 
} 

但這些只會打印找到的數據。如果你想在數據中發現的位置,你將不得不修改它多一點

int namesearch(LIST *list,STUDENT **pPre,STUDENT **pLoc,char target[],STUDENT *foundat){ 
    int n; 
    int found = 0; 
    *pLoc = list->head; 
    for (;*pLoc!=NULL;){ 
     n=strcmp(target,(*pLoc)->name); 
     if (n==0){ 
       printf("%s%d | %-18s| %0.1f | %0.1f",RESULT,(*pLoc)->sid,(*pLoc)->name,(*pLoc)->ca,(*pLoc)->exam); 
      foundat[found] = *pLoc; 
      found++; 
      fflush(stdin);getch(); 
     } 
     *pPre = *pLoc; 
     *pLoc = (*pLoc)->next; 
    } 

    return found; 
} 

告訴爲什麼運行時錯誤情況發生,請提供完整的代碼...只是走一個猜測我已經刪除了STRNCMP並將其更改爲strcmp(這可能是目標或* pLoc->名稱未能提供MAXNUM字符數的原因之一)

+0

已提供完整的代碼。運行時錯誤已解決。我將嘗試處理循環部分。不管怎麼說,還是要謝謝你。 – user2351825 2013-05-05 14:48:32

+0

@ user2351825我希望它能打印出你需要的結果嗎? – DarthCoder 2013-05-05 16:20:26

+0

是的,這是我想要的結果。非常感謝。 – user2351825 2013-05-05 18:25:13