Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] leggere da file con fscanf

    ciao,
    ho creato un file di testo con fprintf con la seguente forma:
    codice:
    fprintf(f, "%d\t%s\n", numero, stringa);
    il file adesso mi contiene qualcosa del genere:
    codice:
    1990    film numero uno
    1995    film numero due
    2000    film numero tre
    il mio problema è recuperare queste informazioni da file.
    ho provato così:
    codice:
    ...
    FILE *f;
    int numero;
    int scan;
    char *stringa;
    
    f = fopen(...);
    
    while(scan!=EOF)
    {
        scan=fscanf(f, "%d\t%s",numero, stringa);
        printf("\n%d\n%s\n",numero, stringa);
    }
    fclose(f);
    ma mi viene restituito un access violation sulla riga dello scanf. qualcuno sa spiegarmi cosa sto sbagliando per favore?
    xxx

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    credo che sia un errore di puntatore nullo, penso si debba per tanto allocare con malloc oppure usare un array tipo char stringa[100].

    Se riesco provo e ti so dire se così funzia.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    si in quel modo funziona, però:

    1) Ti sei scordato di passare il riferimento di int numero a fscanf(&numero)

    2) fscanf si ferma appena trova uno spazio, quindi o cambi funzione oppure al posto di "film numero uno" fai
    "film_numero_uno"

    3) Ti dimentichi di inizializzare int scan.

    Detto questo, usando '_' al posto di ' ' nel file da leggere, il programma mi funziona:

    codice:
    #include <stdio.h>
    
    int main(void) {
    FILE *f;
    int numero;
    int scan = 0;
    char stringa[100];
    
    f = fopen("Test.txt", "r");
    
    while(scan!=EOF)
    {
        scan=fscanf(f, "%d\t%s", &numero, stringa);
        printf("\n%d\n%s\n", numero, stringa);
    }
    fclose(f);
    
    return 0;
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Originariamente inviato da netarrow
    si in quel modo funziona, però:

    1) Ti sei scordato di passare il riferimento di int numero a fscanf(&numero)

    2) fscanf si ferma appena trova uno spazio, quindi o cambi funzione oppure al posto di "film numero uno" fai
    "film_numero_uno"

    3) Ti dimentichi di inizializzare int scan.

    Detto questo, usando '_' al posto di ' ' nel file da leggere, il programma mi funziona:

    ciao e grazie per la risposta.
    1) ho dimenticato il riferimento a &numero solo sul forum, errore di trascrizione
    2)questo è interessante, per leggere tutta la riga devo usare fgets?

    3)anche qui ho sbagliato a trascrivere.

    nel tuo script usi un array statico di char, posso fare un'allocazione dinamica? in tal caso devo leggere carattere per carattere con fgetc fino a \n?

    ciao e grazie per l'aiuto
    xxx

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Alethesnake
    ciao e grazie per la risposta.
    1) ho dimenticato il riferimento a &numero solo sul forum, errore di trascrizione
    2)questo è interessante, per leggere tutta la riga devo usare fgets?

    3)anche qui ho sbagliato a trascrivere.

    nel tuo script usi un array statico di char, posso fare un'allocazione dinamica? in tal caso devo leggere carattere per carattere con fgetc fino a \n?

    ciao e grazie per l'aiuto
    Per leggere anche gli spazi dovrebbe andare fgets.
    Per allocare dinamicamente la memoria credo si possa solo leggere carattere per carattere come dici e man mano re-allocare lo spazio sufficiente con realloc.

    Per l'allocazione dinamica ti consiglio questo thread: http://forum.html.it/forum/showthrea...hreadid=787828

    E' usato per leggere a console, ma credo che con qualche adattamento vada anche con i file.

    Ma secondo me, sarà difficile trovare un titolo tanto lungo, 100 caratteri già è un ottimo margine.
    Se il tuo problema è dopo risparmiare la memoria potresti fare un strlen e disallocare la parte non usata.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    ti ringrazio, mi sa che farò carattere per carattere (tanto per esercizio oltre che per risparmiare memoria)

    Originariamente inviato da netarrow

    Per l'allocazione dinamica ti consiglio questo thread: http://forum.html.it/forum/showthrea...hreadid=787828

    E' usato per leggere a console, ma credo che con qualche adattamento vada anche con i file.


    ehm.. quella funzione l'ho postata io ieri

    xxx

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Alethesnake
    ti ringrazio, mi sa che farò carattere per carattere (tanto per esercizio oltre che per risparmiare memoria)


    ehm.. quella funzione l'ho postata io ieri

    LOL, non mi ero accorto :maLOL:

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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