Fscanf vs sscanf

di il
6 risposte

Fscanf vs sscanf

Ciao a tutti, volevo sapere che differenza e quando usare la fscanf o la sscanf.
So che la fscanf registra i valori che si leggono sul file, mentre la sscanf registra i valori che si leggono da una stringa, ma quando apro un file di testo ad esempio e voglio memorizzare i valori all'interno di alcune variabili, array, o strutture da me definite cosa cambia nell'utilizzare una o l'altra e quando viene utilizzata una anziché l'altra?
Grazie mille spero di essere stato chiaro.

6 Risposte

  • Re: Fscanf vs sscanf

    Beh la risposta è quella. La fscanf se leggi da file i dati, la sscanf se i dati arrivano da una stringa. Che altro c'è da dure?
  • Re: Fscanf vs sscanf

    oregon ha scritto:


    Beh la risposta è quella. La fscanf se leggi da file i dati, la sscanf se i dati arrivano da una stringa. Che altro c'è da dure?
    Perchè vedo che a volte usa la sscanf in accoppiata con la fgets per prelevare i dati dal file, cosa cambia tra le due?
    Se non è chiaro provo a fare un esempio.
  • Re: Fscanf vs sscanf

    Fai l'esempio...
  • Re: Fscanf vs sscanf

    oregon ha scritto:


    Fai l'esempio...
    Ho un file CSV in cui voglio leggere riga per riga il contenuto e salvarlo in una struttura. Questo file è composto da 3 colonne in particolare una stringa e due float separati da ;
    Definendo per esempio la seguente struttura:
    typedef struct{
    char stringa[10];
    float num1;
    float num2
    }t_struct;
    io apro il file successivamente dopo aver definito un vettore riga che utilizzo per la fgets e una variabile t_struct var scrivo
    while(fgets(riga, 30, fp)!=NULL){
    sscanf(riga, "%[^;];%f;%f", var.stringa, &var.num1, &var.num2);
    Utilizzando la fscanf scrivo il seguente pezzo di codice:
    while(!feof(fp)){
    fscanf(fp, "%s;%f;%f", var.stringa, &var.num1, &var.num2); 
    Qual è la differenza tra le due scritture?
  • Re: Fscanf vs sscanf

    Alla fine ottieni il risultato con tutti e due i metodi (anche se c'è qualcosa da aggiustare).
    Ovviamente se utilizzi la sscanf devi avere una variabile in memoria in più quindi non conviene.

    In realtà la cosa migliore nel tuo caso è scrivere così
    
    while (fscanf(fp, "%[^;];%f;%f\n", var.stringa, &var.num1, &var.num2)==3)  {	
    
  • Re: Fscanf vs sscanf

    oregon ha scritto:


    Alla fine ottieni il risultato con tutti e due i metodi (anche se c'è qualcosa da aggiustare).
    Ovviamente se utilizzi la sscanf devi avere una variabile in memoria in più quindi non conviene.

    In realtà la cosa migliore nel tuo caso è scrivere così
    
    while (fscanf(fp, "%[^;];%f;%f\n", var.stringa, &var.num1, &var.num2)==3)  {	
    
    Ok grazie mille!!!
Devi accedere o registrarti per scrivere nel forum
6 risposte