PDA

View Full Version : ordinare per cognome da file [c]


*MATRIX*
12-11-2005, 10:34
ciao raga avrei bisogno di un aiutino

ho un file nomi.txt con su scritto dei nomi e cognomi
es
Rossi mario
Bianchi Luca
verdi Antonio

devo scrivere in un altro file nomi2.txt perņ ordinato per cognome
Bianchi Luca
Rossi Mario
Verdi Antonio

devo usare puntatori record ed allocazione dinamica


#define dim 10
#include <stdlib.h>
#include <stdio.h>
#define n 3

typedef struct {
char cognome[30],nome[30]
} persona;
main()
{ persona *dato;
persona *p;
p=(persona*) malloc(n*sizeof(persona));
int k=0;
int x=1;
FILE* lettura;
FILE* scrittura;
scrivi=fopen("nomi2.txt","wt");
if ((leggi=fopen("nomi.txt","r"))==NULL)
{
printf("ERROR");
}
//ordinamento
while (fscanf(leggi,"%s%s\n", p[k].cognome,p[k].nome)!=EOF)
{
while (fscanf(leggi,"%s%s\n", p[x].cognome,p[x].nome)!=EOF)
{
if (p[x].cognome>p[k].cognome)
{
*dato=p[x];
p[x]=p[k];
p[k]=*dato;
}
else
{
x++;
}
k++;
}
}
/*stampa*/
k=0;
while (fscanf(lettura,"%s%s\n", p[k].cognome,p[k].nome)!=EOF)
{
fprintf(scrivi,"%s %s \n",p[k].cognome,p[k].nome);
k++;
}
fclose(scrivi);
fclose(leggi);
system("pause");
}


il problema e che non scrive niente sul file in output

se elimino la procedura di scambio mi sembra scrive

vi ringrazio per l'aiuto

*MATRIX*
12-11-2005, 11:17
vi prego datemi una mano :cry:

cionci
12-11-2005, 11:21
Ricorda che una persona puņ avere un nome o cognome con gli spazi...quindi ti consiglio di usare fgets per leggere l'intera riga (togli l'ultimo \n in fondo alla stringa letta, se presente)...

Secondo me ti conviene leggere prima TUTTE le stringhe...e DOPO eseguire l'ordinamento...

*MATRIX*
12-11-2005, 12:05
Ricorda che una persona puņ avere un nome o cognome con gli spazi...quindi ti consiglio di usare fgets per leggere l'intera riga (togli l'ultimo \n in fondo alla stringa letta, se presente)...


in che senso ad esempio de Lucia , de Rosa ?

non il problema non lo prevede per il momento

solo nomi e cognomi interi c'č solo uno spazio tra l'uno e l'altro


Secondo me ti conviene leggere prima TUTTE le stringhe...e DOPO eseguire l'ordinamento...

non ho capito in che modo?

cionci
12-11-2005, 12:31
Ok...allora continua a leggere in questo modo... Ma leggi prima tutti i nomi ed i cognomi e mettili in un vettore di persona...

Intanto pensa al problema sopra e solo dopo devi pensare all'ordinamento...