我需要一个用C语言编写的程序的帮助,它涉及到通过有序插入将数据插入到列表中。必须先按姓氏排序,如果发现两个相同的姓氏,则必须按名称排序。我抛出了两行代码,但如果姓氏相同,则不会按名称排序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct vettura
{
  char marca[11];
  char modello[21];
  int anno;
  struct vettura *next;
};
struct lista
{
  char cognome[21];
  char nome[21];
  char fiscale[12];
  char email[21];
  struct vettura *vet;
  struct lista *next;
 };

 void socio(struct lista **list)
 {
    struct lista *p,*t=*list,*g;
    p=(struct lista*)malloc(sizeof(struct lista));
    p->next=NULL;
    p->vet=NULL;
    fflush(stdin);
    printf("Insert surname: ");
    gets(p->cognome);
    fflush(stdin);
    printf("Insert name:  ");
    gets(p->nome);
    fflush(stdin);

    if(*list==NULL)
    {
        *list=p;
        return;
    }
    else
    {
        for(g=*list;g!=NULL&&(strcmp(g->cognome,p->cognome)<0);t=g,g=g>next)
            {
                printf("Cognome in lista: %s \t",g->cognome);
                printf("Conome da inserire: %s \n",p->cognome);
                if(strcmp(t->cognome,p->cognome)==0)
                    {
                        if(strcmp(t->nome,p->nome)<0)
                        {
                            break;
                        }
                    }

            }
        if(t==g)
            {
                p->next=*list;
                *list=p;
                return;
            }
        else
            {
                t->next=p;
                p->next=g;
                return;
            }
    }
  }
  void stampa(struct lista **list)
  {
    struct lista *scorri=*list;
    while(scorri!=NULL)
    {
        printf("surname: %s \t name: %s \n",scorri->cognome,scorri->nome);
        scorri=scorri->next;
    }
  }


 int main()
 {
  struct lista *list=NULL;
  socio(&list);
  socio(&list);
  socio(&list);
  stampa(&list);
 }

我做错什么了?

最佳答案

当违反条件strcmp(g->cognome,p->cognome)<0时,循环终止。它包括strcmp(g->cognome,p->cognome) == 0情况。
这意味着if(strcmp(t->cognome,p->cognome)==0)子句永远不会到达/执行。把它从圈里拿出来。

关于c - 条目按链接列表中的姓名和姓氏排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52279539/

10-12 03:33