04.06.2008 | 22:12:22
immagine
Ing. Emanuele Scapin

C, esempio di utilizzo di fseek per la manipolazione diretta su file.
  • Programma in C di esempio per l'utilizzo di fseek.
    Letti 5 valori interi, vengono salvati su un file binario di interi, successivamente vengono ordinati direttamente sul file.


  • Proposta.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char** argv) {
        setvbuf(stdout, 0, _IONBF, 0);
        
        FILE *f = fopen("pfseek.dat", "wb");
        
        int i;
        for(i=0;i<5;i++) {
            printf("inserisci valore %d-esimo ", i);
            int x;
            scanf("%d", &x);
            fwrite(&x, sizeof(int),1,f);
            printf("\n");
        }
        fclose(f);
        
        // r+b lettura e scrittura su file binario
        f = fopen("pfseek.dat", "r+b");
        
        for(i=0; i<4; i++){
            int j;
            int a;
            fseek(f, i*sizeof(int), SEEK_SET);
            fread(&a, sizeof(int), 1, f);
            
            for(j=i+1; j<5; j++) {
                int b;
                fseek(f, j*sizeof(int), SEEK_SET);
                fread(&b, sizeof(int), 1, f); 
                printf("a=%d, b=%d \n", a, b); 
                
                if (b<a) {
                    int app = a;
                    a = b;
                    b = app;
                    
                    fseek(f, i*sizeof(int), SEEK_SET);
                    fwrite(&a, sizeof(int), 1, f); 
                    
                    fseek(f, j*sizeof(int), SEEK_SET);
                    fwrite(&b, sizeof(int), 1, f);   
                    printf("scambio a=%d, b=%d \n", a, b);
                }
            }
        }
        fclose(f);
        
        f = fopen("pfseek.dat", "rb");
        int y;
        // non si usa feof perché darebbe la dupplicazione dell'ultimo valore letto
        while(fread(&y, sizeof(int), 1, f) == 1) {
            printf("%d ", y);
        }
        fclose(f);
    
        return (EXIT_SUCCESS);
    }
            

© Emanuele Scapin 2009-2018

 

Valid HTML 4.01! Valid CSS!