Salve, ho provato a far funzionare un programma proposto dal mio testo epr invertire i numeri in un txt, tuttavia non funziona ed ho vari interrogativi.
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
int main() {
FILE *f;
long int inizio, fine; //Devono essere inizializzati come long
int tempi, tempif;
unsigned int dim;
/* Nel caso in cui l'apertura non venga eseguita con successo */
if((f=fopen("D:\\numint.txt", "rb+"))==NULL)
{
puts("Non e' possibile aprire il file numint");
exit(1);
}
inizio =0;
dim= sizeof(int);
fseek(f, -dim, SEEK_END); //Dalla fine del file mi sposto a sinistra di dim, cioè di un blocco dati
fine=ftell(f);
while (inizio<fine)
{
fseek(f, inizio,SEEK_SET); //Setta l'indicatore di posizione rispetto al file cui fa riferimento f a scostamento 0 rispetto all'inizio
fread(&tempi, dim,1,f); //Legge blocco dati dal file riferito da f, lo memorizza nel vettore identificato da tempi, legge un blocco di dimensione dim
fseek(f, fine,SEEK_SET); //Si sposta prima dell'ultimo blocco dati
fread(&tempif, dim, 1, f); //Legge l'ultimo blocco dati e lo memorizza nel vettore identificato da tempif
fseek(f,fine,SEEK_SET); //Mi riposiziono a prima dell'ultimo blocco dati, dato che la precedente istruzione mi ha fatto arrivare a fine file.
fwrite(&tempi,dim,1,f); //Scrivo nell'ultimo blocco il valore nel vettore tempi
fseek(f,inizio,SEEK_SET); // Mi posiziono a inizio file
fwrite(&tempif,dim,1,f); //scrivo nel primo posto l'ultimo elemento
inizio=inizio+dim;
fine=fine-dim;
}
return 0;
}
Degli interrogativi, vi sono: come va gestito il file di testo? Cioè, il problema è che, dato che devo gestire dei numeri, ci deve essere un modo per far capire al programma se quello in input è un numero o una cifra, in modo che scrivendo ad esempio 12, lo lasci illeso, al psoto di trasformarlo in 21, quindi deve esserci un modo per separare i numeri tra loro. In tal caso, come si gestisce lo spazio, tenendo conto che nel programma non fa altro che passare da un byte all'altro, e che anche lo spazio dovrebbe occupare spazio in memoria? O forse conviene unare un newline?
In ogni caso, anche scrivendo cifre attaccare contigue senza alcuno spazio, esse non vengono ordinate come ci si aspetta.
Un'altro dubbvio particolare è il sizeof int usato.So che a seconda del compilatore è 2 o 4 byte, nel mi ocaso 4, ma il file di testo non potrebbe usare una dimensione in byte diversa da quella del compilatore?
Grazie.