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("%s\n%d | %-18s| %0.1f | %0.1f",RESULT,(*pLoc)->sid,(*pLoc)->name,(*pLoc)->ca,(*pLoc)->exam);
*pLoc=(*pLoc)->next;
}
fflush(stdin);getch();
return 1;
}
}
答案 0 :(得分:3)
行中的测试
for (;(*pLoc)->ca<upper&&*pLoc!=NULL;)
是错误的方式。在检查*pLoc
之前,您将取消引用(*pLoc)->ca<upper
作为*pLoc!=NULL
测试的一部分。修复只是交换测试的顺序
for (;*pLoc!=NULL && (*pLoc)->ca<upper;)