[C] dubbio su fscanf e caratteri speciali

di il
10 risposte

[C] dubbio su fscanf e caratteri speciali

Ciao a tutti, ho un problema con fscanf per leggere un file.
mi spiego: ho un file con varie righe(non note) nel seguente formato ( int int carattere )
esempio:
66 79 E
4 87 A
64 779 B
ecc....


per leggerlo io ho fatto:
while((fscanf(fp,"%d%d%c", &ind1, &ind2, &tmpcarat))!=EOF)
ma ho riscontrato problemi con la lettura del carattere. Questo accade perchè fscanf salva \n al posto del carattere? o perchè salva lo spazio al posto del carattere?

io pensavo che fscanf salvasse \n come carattere ma nella soluzione proposta dal prof c' è scritto di leggere il file così:
while((fscanf(fp,"%d%d%*c%c", &ind1, &ind2, &tmpcarat))!=EOF)
e scritto così, il %*c ,mi farebbe ignorare lo spazio.. da qui il dubbio.

10 Risposte

  • Re: [C] dubbio su fscanf e caratteri speciali

    Sicuro che non c'è scritto

    &tmpcarat
  • Re: [C] dubbio su fscanf e caratteri speciali

    oregon ha scritto:


    Sicuro che non c'è scritto

    &tmpcarat
    si scusa, ho scritto male nel post, ora ho corretto.. a parte quello il dubbio rimane
  • Re: [C] dubbio su fscanf e caratteri speciali

    E qual è il problema ... in quel modo ignori lo spazio e leggi la lettera ...
  • Re: [C] dubbio su fscanf e caratteri speciali

    oregon ha scritto:


    E qual è il problema ... in quel modo ignori lo spazio e leggi la lettera ...
    ma io ero convinto che fscanf ignorasse gia di default gli spazi.. perchè qui ho bisogno di specificarglielo?
  • Re: [C] dubbio su fscanf e caratteri speciali

    Perché leggi un carattere e lo spazio è un carattere.
  • Re: [C] dubbio su fscanf e caratteri speciali

    oregon ha scritto:


    Perché leggi un carattere e lo spazio è un carattere.
    grazie mille oregon.. ma quindi, rimanendo in tema di funzioni per la lettura da file: se per leggere un testo ad esempio
    Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura,
    ché la diritta via era smarrita.
    Ahi quanto a dir qual era è cosa dura esta selva selvaggia

    uso :
    i=0;
    while((fscanf(fp,"%s", mat[i]))!=EOF){
    i++;}
    
    mi salva in
    mat[0]<----Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura,
    mat[1]<-----ché la diritta via era smarrita.
    mat[2]<-----Ahi quanto a dir qual era è cosa dura esta selva selvaggia
    ?
  • Re: [C] dubbio su fscanf e caratteri speciali

    No, legge

    Nel
    mezzo
    del

    Non stai leggendo caratteri con %c ma stringhe con %s e lo spazio diventa un separatore.
  • Re: [C] dubbio su fscanf e caratteri speciali

    oregon ha scritto:


    No, legge

    Nel
    mezzo
    del

    Non stai leggendo caratteri con %c ma stringhe con %s e lo spazio diventa un separatore.
    ahhh, forse sto capendo definitivamente la questione... per acquisire tutta la riga come ho scritto prima avrei dovuto usare
    fgets
    , giusto?

    ultimissima domanda
    fscanf
    quindi opera esattamente come
     fgets+sscanf
    ?
  • Re: [C] dubbio su fscanf e caratteri speciali

    ifThisThenThat ha scritto:


    per acquisire tutta la riga come ho scritto prima avrei dovuto usare
    fgets
    , giusto?
    Puoi usare la fgets ma anche la fscanf specificando "%[^\n]\n"
    Mi sa che devi studiare meglio la fscanf
    E comunque occhio al fatto che queste funzioni possono causare un buffer overflow e vanno utilizzate le versioni sicure.
    ultimissima domanda
    fscanf
    quindi opera esattamente come
     fgets+sscanf
    ?
    "Esattamente" è una parola grossa ... diciamo che gli effetti possono essere gli stessi ...
  • Re: [C] dubbio su fscanf e caratteri speciali

    oregon ha scritto:


    Mi sa che devi studiare meglio la fscanf
    perfetto.
    si, mi sa che mi toccherà studiarla ancora dal manuale ma intanto grazie a te ho chiarito varie lacune che avevo. grazie della pazienza oregon!
Devi accedere o registrarti per scrivere nel forum
10 risposte