gpt4 book ai didi

c - 在 C 中的单个链表中搜索

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:07 24 4
gpt4 key购买 nike

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

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

感谢您的帮助。

代码如下:

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(这可能是目标或 *pLoc->name 的原因之一未能提供最大数量的字符)

关于c - 在 C 中的单个链表中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com