vicko98
11-09-2018, 21:01
Salve,
Mi trovo alle prese con un esercizio in cui è richiesto un inserimento ordinato di dati prima per cognome, se vengono trovati cognomi uguali si ordina per nome. fare un inserimento con un singolo confronto non è complicato, infatti fino a li non ho nessun problema. Quando però inserisco dati che hanno lo stesso cognome, non riscontro problemi fino al secondo inserimento, al terzo non ordina più...
Il codice è questo:
#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);
}
Qualcuno sa come posso risolvere questo problema? :(
Grazie in anticipo.
Mi trovo alle prese con un esercizio in cui è richiesto un inserimento ordinato di dati prima per cognome, se vengono trovati cognomi uguali si ordina per nome. fare un inserimento con un singolo confronto non è complicato, infatti fino a li non ho nessun problema. Quando però inserisco dati che hanno lo stesso cognome, non riscontro problemi fino al secondo inserimento, al terzo non ordina più...
Il codice è questo:
#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);
}
Qualcuno sa come posso risolvere questo problema? :(
Grazie in anticipo.