Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211

    [c] Lettura da file. Consigli.

    Stavo leggendo un file di questo genere:
    7
    > 4
    > 7
    > 9
    < 10
    > 3
    < 15
    < 13

    Il primo numero indica quante righe devo leggere. Utilizzo queste istruzioni, ma non funzionano, probabilmente perchè la lettura del char legge anche i caratteri ' ' e '\n'

    //Legge il contenuto
    int m;
    fscanf(input,"%d",&m);
    bool* Segno=new bool[m];
    int* Valori=new int[m];
    for (int i=0;i<m;i++)
    {
    fscanf(input,"%c",&c);
    fscanf(input,"%d",&val);
    Segno[i]=(c=='<');
    Valori[i]=val;
    }

    Cosa mi suggerite?

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    se è c perchè usi l'istruzione new e il tipo booleano?
    Il problema comunque credo risieda in quel simbolo maggiore/minore di fronte al numero... non saprei se possa essere considerato un char o meno.

  3. #3

    Re: [c] Lettura da file. Consigli.

    Originariamente inviato da Cesaropa12
    Stavo leggendo un file di questo genere:
    7
    > 4
    > 7
    > 9
    < 10
    > 3
    < 15
    < 13

    Il primo numero indica quante righe devo leggere. Utilizzo queste istruzioni, ma non funzionano, probabilmente perchè la lettura del char legge anche i caratteri ' ' e '\n'

    //Legge il contenuto
    int m;
    fscanf(input,"%d",&m);
    bool* Segno=new bool[m];
    int* Valori=new int[m];
    for (int i=0;i<m;i++)
    {
    fscanf(input,"%c",&c);
    fscanf(input,"%d",&val);
    Segno[i]=(c=='<');
    Valori[i]=val;
    }

    Cosa mi suggerite?
    In C non esiste il tipo bool, tipico invece del C++.
    Stesso discorso per l'operatore new.

    Inoltre questa istruzione:
    codice:
    Segno[i]=(c=='<');
    non ha significato.

    Ancora....quando entri nel ciclo for, la prima volta che esegue l'istruzione fscanf, ti legge nuovamente il primo valore.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    Segno[i]=(c=='<'); ha significato perchè assegna true se c=='<', false altrimenti.

  5. #5
    in C non si può fare.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    Si scusate...Ora capisco...Ho messo c perchè volevo fare riferimento alle funzioni classiche del c, utilizzando c++.
    Riposto comunque il codice corretto, con l'aggiunta della dichiarazione delle variabili c e val.

    //Legge il contenuto
    int m;
    fscanf(input,"%d",&m);
    bool* Segno=new bool[m];
    int* Valori=new int[m];
    for (int i=0;i<m;i++)
    {
    char c;
    int val;
    fscanf(input,"%c",&c);
    fscanf(input,"%d",&val);
    Segno[i]=(c=='<');
    Valori[i]=val;
    }
    Non mi avete spiegato pero' se l'istruzione fscanf(input,"%c",&c); legge gli spazi e i caratteri '\n'.

  7. #7
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    al posto di new usa la calloc per allocare il vettore.

    p.s: la scanf dovrebbe leggere un intera riga e passare alla successiva.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    Per leggere carattere per carattere(includendo gli spazi e i caratteri \n) cosa uso?

  9. #9
    fgetc(puntatore_File)

    ovviamente restituisce il carattere, quindi devi assegnare l'espressione ad una variabile carattere.

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.