2013-05-05 32 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