|
|
|
|
Strumenti |
11-09-2018, 21:01 | #1 |
Junior Member
Iscritto dal: Aug 2018
Messaggi: 4
|
[C] Inserimento ordinato in lista con due variabili
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: Codice:
#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); } Grazie in anticipo. |
12-09-2018, 13:26 | #2 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao
Codice:
// Sottovento - questo ciclo va bene, continua a scandire fino a trovare il posto giusto 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) { // Sottovento - qui occorre fare come il ciclo che hai fatto sopra, per scandire i nomi if(strcmp(t->nome,p->nome)<0) { break; } } }
__________________
In God we trust; all others bring data |
12-09-2018, 20:37 | #3 |
Junior Member
Iscritto dal: Aug 2018
Messaggi: 4
|
ci ero vicino..grazie! Risolto.
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:41.