FILE DI TESTO

di il
1 risposte

FILE DI TESTO

Il seguente programma mi permette di leggere da file ingresso.txt un certo numero di numeri (0 1 1........ etc) e poi mediante la funzione conta mi restituisce la dimensione di questo file........

Il problema che ho incontrato è che questa funzione mi restituisce un valore negativo, sia esso -858993444....... Non capisco da cosa possa dipenere questo errore...... perchè per quanto concerne la codifica sia tutto ok!!!

#include <stdio.h>

/*conta quanti elementi sono presenti nel file*/
int conta(FILE *);
main()
{
FILE *fpi, *fpu;
int N;


fpi = fopen ("C:\\LABORATORIO\\ingresso.txt", "r");

if (fpi == NULL)
printf ("Il file ingresso.txt non esiste!!!\n");
else
{
fpu = fopen ("C:\\LABORATORIO\\uscita.txt", "w");
N = conta (fpi);

fprintf(fpu, "%d", N);
}
}

int conta (FILE *A)
{
int i, conta;

while (fscanf(A, "%d", &conta) != EOF)
i = i + 1;
return i;
}

1 Risposte

  • Re: FILE DI TESTO

    Ciao,

    Il problema è di banale soluzione... stai incrementando, si, la variabile i nella while... ma non hai provveduto ad inizializzarla a 0.

    E'bene fare attenzione a questo genere di cose. Nonostante in certi casi una variabile è inizializzata a zero per default, lo standard non assicura niente in merito, ed i compilatori non si comportano tutti alla stessa maniera.

    Un altra causa del problema che hai osservato è il fatto che stai usando un intero con segno... è piuttosto improbabile, ma se incrementi oltre il massimo numero positivo possibile (circa 2 miliardi e rotti) ottieni un numero negativo. Non credo tu stia trattando miliardi di numeri, ma in caso potresti ricorrere ad un unsigned int (0...4miliardi) o, se non bastano, un longlong, un __int64 od un numero reale (float, double).

    Ciaociao
Devi accedere o registrarti per scrivere nel forum
1 risposte