1

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

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

感谢您的帮助。

这是代码:

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

1 回答 1

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 失败的原因之一提供 MAXNUM 个字符)

于 2013-05-05T13:54:52.377 回答