用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我希望它能打印出你需要的结果?