[C] Contare elementi presenti in un file

di Anonimizzato22168 il
11 risposte
Salve, ho un problema con questo programma che apre un file e ne conta gli elementi all'interno. Ho creato un file di questo tipo:
1
2
3
4
5
posizionato all'interno della cartella del programma. Il programma dovrebbe giustamente ritornare 5 però purtroppo non ritorna nulla, sapreste trovare l'errore (probabilmente stupido)?
Grazie anticipatamente.
#include <stdio.h>
#include <stdlib.h>
#define MAX 40 

int sizeFile(char file_name[])
{
	FILE *fp;
	int v[MAX], i=0;

	fp = fopen(file_name, "r");

	if (fp==NULL)
	{
		printf("Errore nell'aperturta del file\n");
		exit(-1);
	}

	while(!feof(fp))
	{
		fscanf(fp, "%d", &v[i]);
		i++;
	}

	fclose(fp);

	return i;
}

int main(int argc, char const *argv[])
{
	char file_name[MAX];
	int dim;

	printf("Inserisci il nome del file: ");
	scanf("\n%s", file_name);

	dim = sizeFile(file_name);

	return dim;
}

11 Risposte

  • Non ritorna nulla perchè non gli fai stampare niente
    Prima di uscire dal main() mettici una bella printf() di dim.
  • Già provato, sul terminale non stampa nulla
  • Questo qui sotto non ti stampa niente?
       ...   
       printf("richiamo sizeFile\n");
       dim = sizeFile(file_name);
       printf("dim=%d\n",dim);
       return dim;
    }
  • Esatto, non visualizza proprio nulla, devo interrompere il programma con ctrl+c per fermarlo perché non fa nulla.
  • Neanche "richiamo sizeFile" ?
  • Mettendo quella si, vuol dire che l'errore è nella funzione ma non riesco a capire quale.
  • giovanni13696 ha scritto:


    Mettendo quella si, vuol dire che l'errore è nella funzione ma non riesco a capire quale.
    Devi debuggare
    Inserisci delle printf nel ciclo while()
       while(!feof(fp))
       {
          printf("Chiamo fscanf con i=%d\n",i);
          fscanf(fp, "%d", &v[i]);
          printf("ho letto %d\n",v[i]);
          i++;
       }
    
  • A quanto pare il problema sta nel ciclo. Era infinito, ho corretto poi mettendo un && i<MAX ma ora non mi entra proprio nel ciclo. Non so davvero quale possa essere il problema.
  • E se provi semplicemente cosi'

    while (fscanf(fp, "%d", &v) == 1)
    i++;
  • Già provato. Sarà qualche errore nel file? Io l'ho fatto mettendo i numeri per ogni riga. E' corretto?
  • Prova a fare il ciclo utilizzando fgets() al posto di fscanf().
    Invece di leggere direttamente l'intero, con fgets() leggi una stringa che poi trasformi in intero con atoi().
    Comunque come primo passo leggi riga per riga con fgets() e stampi la riga letta; esci con feof().
Devi accedere o registrarti per scrivere nel forum
11 risposte