用C语言在单链表中搜索

用C语言在单链表中搜索,c,search,linked-list,C,Search,Linked List,我写这个程序时遇到了一些问题。在列表中搜索时,只能显示第一个结果。即使有其他符合要求的数据,程序也不能显示多个结果 第二个问题是,当用户尝试按名称搜索时,将出现运行时错误 谢谢你的帮助 代码如下: int namesearch(LIST *list,STUDENT **pPre,STUDENT **pLoc,char target[]){ int n; *pLoc = list->head; for (;*pLoc!=NULL && n!=0;){

我写这个程序时遇到了一些问题。在列表中搜索时,只能显示第一个结果。即使有其他符合要求的数据,程序也不能显示多个结果

第二个问题是,当用户尝试按名称搜索时,将出现运行时错误

谢谢你的帮助

代码如下:

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;
    }
}

首先,您没有得到多个结果的原因是因为循环的结构。以下更改可以打印结果

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,这可能是target或*pLoc->name未能为您的第一期提供最大字符数的原因之一,为什么不停止第一次匹配呢?我建议您与您的同学聚在一起:嗯。。对不起,我听不懂你说的话。完整的代码已经发布,或者它可以帮助您更多地了解我正在尝试做什么。无论如何,谢谢。完整的代码已经提供。运行时错误已解决。我将尝试在循环部分的工作。谢谢。@user2351825我希望它能打印出你需要的结果?