File di testo

di il
1 risposte

File di testo

Salve, sto realizzando questo programma, e non so perchè il ciclo che ho segnato nel codice viene eseguito una sola volta, come posso risolvere? Grazie.

#include <stdio.h>
#include <stdlib.h>

void LeggereFile(FILE **fp);
void LeggereVettoreADaFile(FILE *fp, int *vettoreA);
int ContaElementiFile(FILE *fp);
void AllocareVettoreA(int *vettoreA, int dim);
void ScrivereElementoInVettoreA(int i, int j, int vettoreA[]);

int main(void){
	FILE *fp;
	int *vettoreA = NULL;
	//int *vettoreB;

	LeggereFile(&fp);
	LeggereVettoreADaFile(fp, vettoreA);
	//ScrivereVettoreB(vettoreA);
	//StampareVettoreB(vettoreB);

	system("pause");
	return 0;
}

void LeggereFile(FILE **fp){
	if((*fp = fopen("file.txt","r")) == NULL){
		printf("errore apertura file\n");
	}

	return;
}

void LeggereVettoreADaFile(FILE *fp, int *vettoreA){
	int i;
	int j = 0;
	int dim = ContaElementiFile(fp);
	AllocareVettoreA(vettoreA, dim);
	rewind(fp);

	while(!feof(fp)){           <-----------------------------------------il ciclo viene eseguito una sola volta
		//printf("se questo messaggio viene stampato 9 volte il ciclo funziona");
		fscanf(fp, "%d%*c ", &i);
		ScrivereElementoInVettoreA(i, j, vettoreA );
		j++;
	}

	return;
}

int ContaElementiFile(FILE *fp){
	int i = 0;

	while(!feof(fp)){
		fscanf(fp, "%*d%*c ");
		i++;
	}

	return i;
}

void AllocareVettoreA(int *vettoreA, int dim){
	vettoreA = (int *) malloc (dim * sizeof(int));

	return;
}

void ScrivereElementoInVettoreA(int i, int j, int *vettoreA){
	*(vettoreA + j) = i;

	return;
}
il contenuto del file di testo è :
2, 3, 5, 2, 7, 4, 3, 2, -1

1 Risposte

  • Re: File di testo

    Hai complicato notevolmente il codice...
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void) {  
        FILE *fp = fopen("file.txt", "r");  
        if(fp == NULL)
    	return -1; 
        
        char buffer[1000];
        int i, length = 0, array[1000];
        
        while (fgets(buffer, sizeof(buffer), fp) != NULL){ 
            char *cp = strtok(buffer, ",");
            while (cp != NULL){
                array[length++] = atoi(cp);
                cp = strtok(NULL, ",");
            }
        }
        fclose(fp);
        
        for(i = 0; i < length; i++)
            printf ("%d\n", array[i]);
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte