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

    [C] fscanf - perchè non funziona...?

    E' vero che ho un pò di sonno, ma non riesco a capire perchè non funziona...! Ho consultato tutte le risorse disponibili, sia on line, che su carta... eppure c'è ancora qualcosa che non va...

    Passo al dunque. Devo leggere un file:
    3.44002 0.008 -41.9 -23.9 -4.5 0 97 25
    3.22044 0.008 -41.9 -23.7 -4.5 1 97 25
    1.18835 0.008 -43.1 -21.9 8.3 10 161 19
    1.76625 0.008 -42.9 -21.9 8.3 10 161 20
    2.04581 0.008 -42.3 -21.9 -4.1 10 99 23
    Questo file campione costituisce l'input "prova.dat"

    Questo è il codice (scrivo solo le parti essenziali).
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>double a,b,c,d,e;
    int l,m,n;
    main()
    {
    char InputFile[26];
    FILE *input;
    strcpy(InputFile,"prova.dat");
    printf("InputFile: %s\n\n",InputFile);

    if ((input = fopen(InputFile, "r")) == NULL)
    { printf("\nCannot open file %s\n\n",InputFile);
    return(1);
    }
    printf("*** InputFile: %s OPEN ****\n\n",InputFile);
    nline = 0;

    while (!feof(input))
    { fscanf(input,"%f%f%f%f%f%i%i%i",&a,&b,&c,&d,&e,&l, &m,&n);
    printf("%f",a); Qui io mi aspetto di vedere il valore 3.44002
    nline=nline+1;
    printf("\n nline = %i\n\n",nline);
    }

    fclose(input);
    printf("*** InputFile: %s CLOSED ****\n\n",InputFile);
    return 0;
    }
    La compilazione procede correttamente. L'output è il seguente:
    InputFile: /prova.dat

    *** InputFile: /prova.dat OPEN ***

    0.000000
    nline = 1

    0.000000
    nline = 2

    0.000000
    nline = 3

    0.000000
    nline = 4

    0.000000
    nline = 5

    *** InputFile: /prova.dat CLOSED ***
    Che sta succedendo? Sembra come se la funzione scanf lega tutti ZERO!!! Dove è l'errore? Come faccio a leggere i valori contenuti nel file di ingresso?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Con %f devi usare un float e non un double.

    Altrimenti devi usare %lf

  3. #3
    Bene.
    Se dichiaro le variabili come
    codice:
    double a,b,c,d,e;
    devo utilizzare
    codice:
    %lf
    ( lf=long float ? long float = double? ) come specificatore di formato.

    Quindi, ricapitolando:
    - se dichiaro una variabile come float, lo specificatore di formato e' %f
    - se dichiaro una variabile come double, lo specificatore di formato e' %lf

    e il mio codice va corretto cosi':
    codice:
    double a;
    fscanf(input,"%lf",&a);
    printf("%lf",a);
    oppure:
    codice:
    float a;
    fscanf(input,"%f",&a);
    printf("%f",a);
    Ciao, Giulia

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì Giulia, hai provato?

  5. #5
    Yesse! Tutto e' Ok (almeno per il momento... l'esperienza mi insegna che con la programmazione nn bisogna mai cantare vittoria troppo presto...!). Ho aggiunto il "riassunto" perche' fosse di aiuto anche agli altri.

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.