又是
我。我的搜索程序差不多完成了。但是,在单个链表中进行搜索时会出现运行时错误。只有当我用range搜索时才会发生。谢谢你的帮助。以下是相关代码:
int casearchrange(LIST *list,STUDENT **pPre,STUDENT **pLoc,int upper,int lower){
*pLoc = list->head;
for (;*pLoc!=NULL && lower>(*pLoc)->ca;){
*pPre = *pLoc;
*pLoc = (*pLoc)->next;
}
if (*pLoc==NULL)
return 0;
else {
for (;(*pLoc)->ca<upper&&*pLoc!=NULL;)
if ((*pLoc)->ca>=lower&&(*pLoc)->ca<=upper){
printf("%sn%d | %-18s| %0.1f | %0.1f",RESULT,(*pLoc)->sid,(*pLoc)->name,(*pLoc)->ca,(*pLoc)->exam);
*pLoc=(*pLoc)->next;
}
fflush(stdin);getch();
return 1;
}
}
一行中的测试
for (;(*pLoc)->ca<upper&&*pLoc!=NULL;)
是反向的。在检查*pLoc!=NULL
之前,您将取消对*pLoc
的引用,作为(*pLoc)->ca<upper
测试的一部分。修复方法是简单地交换测试
for (;*pLoc!=NULL && (*pLoc)->ca<upper;)