Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C] scrittura su file

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] scrittura su file

    Salve,
    sto cercando di capire come funziona la lettura da e la scrittura su file.
    Il programma dovrebbe leggere da file una serie di numeri, salvarli in un vettore, raddoppiare ogni elemento del vettore, e ricopiare in coda ai numeri iniziale il loro doppio ( quindi stampare sul file il vettore modificato).Purtroppo oltre a stampare sul file i numeri raddoppiati, mi stampa anche un altro numero che non so da dove proviene ecco :
    Il codice è questo:
    codice:
    #include<stdlib.h>
    #include<stdio.h>
    main()
    {
        FILE* f;
        char nome[10];
        int vettore[10],i,z;
        printf("Inserire il nome del file\n");
        scanf("%s", nome);
        f=fopen(nome, "r");
        i=0;
        if(f==NULL)
        {
                   exit(0);
        }
        else
        {
            while(feof(f)==0)
            {
                        fscanf(f,"%d", &vettore[i]);
                        i=i+1;
            }
            fclose(f);
            for(z=0;z<i;z++)
            {
                       vettore[z]=vettore[z]*2;
            }
            fopen(nome, "a");
            for(z=0;z<i;z++)
            {
                            fprintf(f,"%d\n", vettore[z]);
            }
            fclose(f);      
                 
            
        }
        system("pause");
    }

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Secondo me il problema sta nel fatto che tu scrivi sul file con fprintf ma scrivi anche i caratteri newline, per cui feof non lo raggiungi quando hai finito di leggere tutti i numeri, ma un passo dopo, perchè legge anche '\n'.
    Quindi devi tenere conto di questo, prova a modificare la fscanf così:
    codice:
    fscanf(f,"%d\n", &vettore[i]);
    E fammi sapere se funziona.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ho corretto e adesso va bene. Ti ringrazio. Ma per quale motivo aggiungedo \n leggo soltanto i numeri nel file? Cioè, mettiamo caso che non ci fosse, le cose andrebbero in questo modo? :
    leggo l'ultimo numero, feof mi restituisce ancora 0 perchè dopo l'ultimo numero c'è lo spazio, quindi leggo lo spazio.

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Lo spazio non è '\n' , è un altro carattere.Comunque si, se nella frase che hai detto sostituisci le parole "spazio" con "invio", è giusta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Si, non so come mi è uscito spazio xD Quindi, se i numeri nel file fossero disposti tutti lungo una riga, non ci sarebbe bisogno di aggiungere \n alla scanf giusto?

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non ci sarebbe bisogno,però se ad esempio scrivi 1,2 e 3 tutti attaccati, ti legge 123 come primo numero.Non sa distringuere le cifre, non sa quando fermarsi a leggere.Ci vuole un carattere separatore.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Giusto. Quindi in pratica, per evitare che legga l'invio alla fine, è sempre necessario aggiungere \n alla fscafn giusto? Ti ringrazio comunque...

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Se usi una singola scanf o fscanf si può anche evitare,ma in generale si, è meglio aggiungere un '\n' .

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Grazie mille!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.