codice:#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define SIZE 20 typedef struct nodo{ char cognome[20]; char nome[20]; char telefono[20]; struct nodo *succ; }agenda; int main() { agenda *k, *pun; FILE *rubrica; int count = 0,i = 0; if ((rubrica = fopen("agenda.txt", "r")) == NULL) { printf("Il File che stai cercando di aprire non esiste\n"); } else { k = (agenda *)malloc(sizeof(agenda)); if(k==NULL) { printf("Memoria esaurita\n"); } else { fscanf(rubrica,"%s",k->cognome); fscanf(rubrica,"%s",k->nome); fscanf(rubrica,"%s",k->telefono); pun = k; count++; while(!feof(rubrica)) { pun->succ = (agenda *)malloc(sizeof(agenda)); pun = pun->succ ; fscanf(rubrica,"%s",pun->cognome); fscanf(rubrica,"%s",pun->nome); fscanf(rubrica,"%s",pun->telefono); count++; } pun->succ = NULL; printf("Numero di record trovati: %d\n",count); pun = k; do { printf("\nNome: %s\t Cognome: %s\t Telefono: %s\t\n",pun->nome,pun->cognome,pun->telefono); pun=pun->succ; }while(pun != NULL); pun = k; char** strs = (char**)malloc(sizeof(char*) * count); for(i = 0; i < count; i++) { strs[i] = (char*)malloc(sizeof(char) * SIZE); char* value = pun->cognome; strcpy(strs[i], value); pun = pun->succ; } int j=0; char* minore; char* maggiore; char* scambio; int scmabia = 0; for(i = 0;i < (count-2); i++) { int scambia = 0; for(j=i+1;j<(count-1);j++) { if(strs[j] < strs[i]) minore = strs[j]; scambia = 1; } if (scambia == 1) { maggiore = strs[i]; strs[i] = minore; strs[j] = maggiore; strcpy(strs[i],minore); strcpy(strs[j],maggiore); } } for(i = 0; i < count; i++) printf(">> %s <<\n", strs[i]); for(i = 0; i < count; i++) free(strs[i]); free(strs); } } fclose(rubrica); printf("\n"); system("PAUSE"); return 0; }