Visualizzazione dei risultati da 1 a 3 su 3

Discussione: I/O in C

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    5

    I/O in C

    Salve a tutti, capito di qui per caso e ne approfitto per chiedere una cosa sul linguaggio C che mi ha dato non pochi problemi negli ultimi giorni. Si tratta delle varie funzioni fscanf, fread ed fwrite. Anche se molti gia' rideranno, magari qualcuno mi potra' spiegare qualcosa :P mentre le ultime due non mi sono MAI funzionate, in nessun modo e sotto nessun aspetto, la prima mi da' degli strani problemi solo di recente. Premettendo che ho gia' provato in tutti i casi ad aprire il file in modalita' binaria o di testo, e non cambia nulla, i problemi di fread ed fwrite sono che semplicemente non mi fa nulla del necessario, sostituendo quello che dovrebbe esserci con degli orrendi quadratini vuoti. Inoltre il valore ritornato e' uguale al numero di elementi scritti, ma questo non so se e' normale oppure deve essere pari al numero di bit scritti... ognuno dice una cosa diversa ho provato il tutto con 2 diversi compilatori, il djgpp e lcc, un freeware (la sintassi del comando e' giusto, ho anche provato a copiare pari pari da vari libri ed esempi e non va...). I problemi con fscanf sono emersi solo di recente e probabilmente hanno origine da qualche errore mio, ma non saprei: gli errori sono sempre diversi e ogni volta sembrano piu' assurdi, ad esempio a volte leggendo da un file non si sa perche' accetta solo le prime 4 righe di lettura, poi funziona bene, poi si incastra di nuovo riuscendo a leggere solo caratteri e stringhe e non interi o float, e tutta una serie di errori apparentemente casuali. Ho formulato le ipotesi piu' strane, che sia colpa di win xp? La piu' plausibile pare cmq che sia colpa mia ma non riesco a capire dove...
    "Of war, we don't speak anymore of war"

  2. #2
    neanche io lo riesco a capire se non posti il sorgente che ti da' errore
    comunque la fread funziona cosi':
    codice:
    #define n_caratteri 1
    int main(void){
    char carattere
    FILE *f;
    
    f=fopen("data.dat","r+");
    if (f==NULL){printf("Il file non esiste");
    return 2;
    }
    fread(&carattere,n_caratteri,n_caratteri*sizeof(char),f);
    return 0;
    }
    la fwrite cosi':
    codice:
    #define n_caratteri 1
    int main(void){
    char carattere
    FILE *f;
    
    f=fopen("data.dat","r+");
    if (f==NULL){printf("Il file non esiste");
    return 2;
    }
    fwrite(&carattere,n_caratteri,n_caratteri*sizeof(char),f);
    return 0;
    }
    dove la define in cima dice quanti caratteri leggi al colpo,
    la sintassi e'
    fread(&(variabile o struttura dati),quante_volte_leggi,dimensione,da che file);
    il file poi va' aperto in :

    "w" se vuoi crearlo da 0 e solo scriverci
    "w+" se vuoi crearlo da 0 e sia leggerci che scriverci
    "r" se vuoi solo leggere(non sovrascrive il file)
    "r+" se vuoi leggere e scrivere(non sovrascrive il file)
    Questi partono dall' inizio del file

    "a" per aggiungere dati alla fine

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    5

    Grazie :)

    Oh grazie uno dei grandi misteri della vita mi si rivela Facevo 2 errori, uno piccolo piccolo dovuto alla mia idiozia (lo utilizzavo solo con gli array, e alla fine delle stringhe non mettevo a mano il \0 :P cmq anche gli altri array non funzionavano, quindi...), e uno grande grande che c'era scritto su Tricky C, che indicava come secondo dato passato la dimensione di un singolo oggetto e come terzo il numero. Il problema e' che anche il manuale del mio vecchio compilatore diceva lo stesso... mah.
    Domani posto anche un breve codice nel quale non mi funziona l'fscanf, cosi' qualche anima pia identifichera' il mio (di certo) grossolano errore
    "Of war, we don't speak anymore of war"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.