我需要用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);
}
我在做什么错了?
答案 0 :(得分:0)
当违反条件strcmp(g->cognome,p->cognome)<0
时,循环终止。它包括strcmp(g->cognome,p->cognome) == 0
情况。
这意味着if(strcmp(t->cognome,p->cognome)==0)
子句永远不会到达/执行。将其带出循环。