Ciao a tutti vorrei che mi aiutaste nel risolvere questo piccolo problema con il linguaggio C.
allora io ho un file di testo che si chiama agenda.txt nel queale ci sono queste tre stringhe:
pippo pluto 0293255165
andrea porri 111111
luis filippo 0147896
io vorrei visualizzare il contenuto di questo file (agenda.txt) e nello stesso tempo riordinare (per nome) in ordine alfabetico le tre stringhe,
in modo tale che io abbia sullo schermo questo:
andrea porri 111111
luis filippo 0147896
pippo pluto 0293255165
controllatemi il mio codice sorgente e ditemi dove sbaglio grazie. ho utilizzato uno switch come menu il mio problema si trova nel case 2.
codice sorgente:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int scelta;
int menu (void);
void registra_utente(char *a, char *b , char *c);
int comp(const void *s1 , const void *s2);
int main()
{
FILE *fp;
char nomeutente[81], cognomeutente[81], telefono[15];
char rubrica[20];
int scelta = menu();
switch (scelta)
{
case 1:
{
fflush(stdin);
printf("\nInserisci il nomeutente , il cognomeutente e il numero di telefono");
printf("\nseparati da uno spazio vuoto\n");
scanf("%s%s%s" , nomeutente,cognomeutente,telefono);
fflush(stdin);
registra_utente(nomeutente , cognomeutente , telefono);
break;
}
case 2:
{
if ( (fp = fopen("agenda.txt" , "r" )) == NULL)
{
printf("\nErrore apertura file");
exit(1);
}
while ( !feof(fp) )
{
fgets(rubrica, sizeof(rubrica), fp);
qsort(rubrica , 20 , sizeof(rubrica[0]), comp);
printf("%s" , rubrica);
}
fclose(fp);
break;
}
case 3:
{
printf("hai scelto 3");
break;
}
case 4:
{
printf(" hai scelto 4");
break;
}
default:
{
puts("fuori intervallo massimo riprova");
}
}
system("PAUSE");
return 0;
}
/* intestazione e definizione della funzione menu*/
int menu (void)
{
int numero;
printf("PROGRAMMA AGENDA .\n");
printf("\n");
puts("Scegli una funzione");
printf("\n");
printf("1 - Inserire Contatto\n");
printf("2 - Leggere Rubrica\n");
printf("3 - Ricerca contatto\n");
printf("4 - Uscire dal programma\n");
scanf("%d" , &numero);
return numero;
}
/*funzioneper inserire nome,cognome e num_tel dell'utente*/
void registra_utente(char *a, char *b , char *c)
{
FILE *fp;
if ( (fp = fopen("agenda.txt" , "a+" )) == NULL)
{
printf("\nErrore apertura file");
exit(1);
}
fprintf(fp, "%s %s %s\n" ,a,b,c);
fclose(fp);
}
/* funzione comp per il confronto in qsort*/
int comp(const void *s1, const void *s2)
{
return (strcmp(*(char **)s1, *(char **)s2));
}