如下程序怎样解决实现不了的问题

如下,为自己写的程序,请问怎样才能解决它运行结果一直是“查无此人”的问题?


int  main(){
    int num,i;
    struct js * head, * tmp;
    printf("input num:");
    scanf("%d",&num);
    printf("          教室号,姓名,性别,职称,教授课程,班级,数目,理论,实验\n");
     head=createlist(num);
     baocun(head);
     int choose;
     head=(struct js*)malloc(sizeof(struct js));
     head->next=NULL;
     char xingming[10];
     while(1){
         menu();
         printf("请输入选择第几个操作:\n");
         scanf("%d",&choose);
         switch(choose){
             case 1:
                 do{
                     printf("xingming:\n");
                     scanf("%s",xingming);
                     seek(head,xingming);
                      char sel[5];
                     printf("\t\t\t是否继续查找(yes or no):");
                     scanf("%s",sel);
                     if(strcmp(sel,"yes")==0) continue;
                     else break;
                 }while(1);


void seek(struct js * head,char xingming1[10]){
    int k=0;
    struct js * tmp, * fq;
    tmp=head->next;
    fq=tmp;
    while(fq!=NULL){
        if(fq->xingming==xingming1){
         k=1;
         printf("%d%s%s%s%s%s%d%d%d",fq->jiaoshihao,fq->xingming,fq->xingbie,fq->zhicheng,fq->kecheng,fq->banji,&fq->num,&fq->lilun,&fq->shiyan);
        }
        fq=fq->next;
    }
    if(k==0){
        printf("\t\t\t\t查无此人\n");
    }
}

你的代码中,出现了一个错误。在seek函数中,你使用了==运算符来比较两个字符串,这是不正确的。在C语言中,你应该使用strcmp函数来比较两个字符串的内容。

修改seek函数中的比较语句,将fq->xingming==xingming1改为strcmp(fq->xingming, xingming1) == 0,如下所示:


void seek(struct js *head, char xingming1[10]) {
    int k = 0;
    struct js *tmp, *fq;
    tmp = head->next;
    fq = tmp;
    while (fq != NULL) {
        if (strcmp(fq->xingming, xingming1) == 0) {
            k = 1;
            printf("%d%s%s%s%s%s%d%d%d", fq->jiaoshihao, fq->xingming, fq->xingbie, fq->zhicheng, fq->kecheng, fq->banji, &fq->num, &fq->lilun, &fq->shiyan);
        }
        fq = fq->next;
    }
    if (k == 0) {
        printf("\t\t\t\t查无此人\n");
    }
}

第38行,字符串的比较需用strcmp()函数,头文件包含:#include<string.h> , 代码修改为:if(strcmp(fq->xingming, xingming1) == 0)

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/268310
  • 这篇博客你也可以参考下:约瑟夫问题(数组方法解决,适用于人数较少的情况)
  • 除此之外, 这篇博客: 简易通讯录实现思路及源码中的 对联系人按照姓名排序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里使用了库函数qsort进行排序,qsort是一个通用的快速排序,可以对任意的同类型的数据按照想要的方式排序。函数声明如下,它有4个参数,
    1、base – 指向要排序的数组的第一个元素的指针。
    2、nitems – 由 base 指向的数组中元素的个数。
    3、size – 数组中每个元素的大小,以字节为单位。
    4、compar – 用来比较两个元素的函数。这个函数是需要自己实现的。

    void qsort(void *base, size_t nitems,\
    	 size_t size, int (*compar)(const void *, const void*))
    
    int cmp(const void *p1, const void *p2) //用名字进行排序
    {
    	Contact* f = (Contact*)p1;
    	Contact* s = (Contact*)p2;
    	return strcmp(f->name,s->name);
    }
    
    void sort_By_Name(Contact* b,int len)
    {
    	qsort(b,len,sizeof(Contact),cmp);
    }
    

  • 您还可以看一下 数智优佳学堂老师的项目管理专题-为何需要人才梯队建设?课程中的 版权声明小节, 巩固相关知识点

38行中是字符串比较,在C语言中不能直接比较,需要用库函数strcmp进行比较