PDA

View Full Version : [C]TORNARE INDIETRO DI RIGA FILE


esoni
07-05-2010, 21:11
CIAO A TUTTI DEVO FARE UN PRGRAMMA C CHE DATO UN FILE ESEPIO

FILE A:
CIAO
DARIO
PINCO

STAMPI NEL FILE C L ULTIMA RIGA DEL FILE A COME PRIMA OVVERO

FILE C:
PINCO
DARIO
CIAO

COME POSSO FARE? DEVE ESSERE OTTIMALE ANCHE SU UN FILE D GROSSE DIMENSIONI

cionci
08-05-2010, 09:00
Non scrivere maiuscolo, sul web significa urlare.

Scorri tutto il file carattere riga per riga (fgets) e ti memorizzi l'ultima riga letta e la posizione nel file del primo carattere di quella riga. Se il file è finito hai trovato ciò che devi scrivere in cima.
Per modificare il file devi scrivere un nuovo file con la prima riga in cima ed il contenuto del vecchio file fino alla posizione del primo carattere della riga che hai messo in cima.

tuccio`
08-05-2010, 20:32
credo venga molto naturale un approccio ricorsivo


void reverse_print(FILE *f) {
int lastline = 1;
char s[BUFSIZE];
fgets(s, BUFSIZE, f);
if (!feof(f)) {
reverse_print(f);
lastline = 0;
}
printf("%s", s);
if (lastline)
printf("\n");
}

wingman87
09-05-2010, 02:14
credo venga molto naturale un approccio ricorsivo


void reverse_print(FILE *f) {
int lastline = 1;
char s[BUFSIZE];
fgets(s, BUFSIZE, f);
if (!feof(f)) {
reverse_print(f);
lastline = 0;
}
printf("%s", s);
if (lastline)
printf("\n");
}

Se ho capito bene deve scambiare solo la prima e l'ultima riga, non riscrivere tutte le righe al contrario. Ad ogni modo il tuo programma non funzionerebbe per file molto grandi.

cionci
09-05-2010, 10:20
Esatto, esaurirebbe lo stack ;)

tuccio`
09-05-2010, 14:56
Esatto, esaurirebbe lo stack ;)ovvio, ma è anche il modo più efficiente e comodo per stampare al contrario.. dipende da cosa devi fare

comunque in effetti da come ha scritto non deve stampare al contrario, ma invertire la prima e l'ultima riga, quindi il problema non si pone