Linguaggio C, lettura da file

di il
3 risposte

Linguaggio C, lettura da file

Il seguente, è il codice di un programma che inserisce in un array gli elementi all'interno del file:

main.c
int main(int argc, char** argv)
{
	char* nomefile = "file2.txt";
	int size = 0, i;
		    
	float* v = leggi_array(nomefile, &size);
	    
}
funzione.c
float* leggi_array(char* nomefile, int* n)
{
	//Array per allocazione dinamica
	float *array;
	int x, i = 0, flag;

	//Controllo apertura file
	FILE *f = fopen(nomefile, "r");
	if(f == NULL)
		printf("Errore nell'apertura del file");
	else
	{
		while(!feof(f))
		{
			flag = fgetc(f);
			*n = *n +1;
		}
		printf("*n: %d", *n);
		
}
Il codice devo ancora completarlo.
La prima cosa che devo fare è contare quanti elementi ci sono all'interno del file. In modo tale da poter allocare dinamicamente il mio vettore che li andrà a contenere.

Il problema è proprio contarli, non riesco a capire dove sbaglio.

Il mio file txt è questo:
1
2
3
4
5
In questo modo *n = 10.

Ora, fate finta che abbia dichiarato flag come double

Se il mio file txt ora è:
0.5768 12
1

13.45
0.001 9.3 89.5
4
*n = 36

Perché?

Ho appena provato con fscanf(f, "%d", &x); al posto di flag = fgetc(f); (riguardo il file contenente i 5 interi) e *n = 5, quindi giusto. E anche con l'altro file *n = 8, ancora giusto. Presumo sia colpa di getc. Ho sbagliato io ad usarla?

3 Risposte

  • Re: Linguaggio C, lettura da file

    Fgetc (come dice il nome) tratta i caratteri. Quindi stai contando i caratteri, ogni carattere compresi punti, virgole, spazi, ecc.. Non è quello che vuoi fare ... pensaci bene
  • Re: Linguaggio C, lettura da file

    Ok, capito. Grazie

    Sono riuscito a farlo, eccolo qui:
    int main(int argc, char** argv)
    {
    	char* nomefile = "file1.txt";
    	int size = 0, i;
    		    
    	float* v = leggi_array(nomefile, &size);
    	for(i = 0; i < size; i++)
    		printf("v[%d] = %f\n", i, v[i]);
    	    
    }
    
    float* leggi_array(char* nomefile, int* n)
    {
    	//Array per allocazione dinamica
    	float *array, flag, x;
    	int dim, i = 0;
    
    	//Controllo apertura file
    	FILE *f = fopen(nomefile, "r");
    	if(f == NULL)
    		printf("Errore nell'apertura del file");
    	else
    	{
    		//Riposizionamento del cursore all'inizio del file
    		//fseek(f, 0, 0);
    		
    		while(!feof(f))
    		{
    			//flag = fgetc(f);
    			fscanf(f, "%f", &x);
    			*n = *n +1;
    		}
    				
    		//Allocazione dinamica della memoria
    		array = (float*) malloc (*n * sizeof(float));
    
    		//Riposizionamento del cursore all'inizio del file
    		fseek(f, 0, 0);
    		
    
    		for(i = 0; i < *n; i++)
    		{
    			fscanf(f, "%f", &x);
    			array[i] = x;
    		}
    		
    		return array;
    		
    	}
    }
  • Re: Linguaggio C, lettura da file

    La morale è

    "non usare le funzioni di libreria a caso"
Devi accedere o registrarti per scrivere nel forum
3 risposte