[C]Muoversi all'interno di un file. Esercizio[PROBLEMA]

di il
2 risposte

[C]Muoversi all'interno di un file. Esercizio[PROBLEMA]

La traccia è la seguente:
Scrivere un sottoprogramma che riceve in ingresso un puntatore ad un file, un array top, ed un intero n che indica la dimensione dell’array. Il sottoprogramma legge dal file valori reali (uno per riga) e popola l’array con gli n valori più grandi. Si supponga che il file non contenga duplicati.

riempi_array(char* nomefile, *top, n){
	FILE *fp;
	int indice_array, numero_considerato, numero_maggiore;
	if(fp = fopen(nomefile, "r")){
		if(top = (int*) malloc(sizeof(int*) * n)){
		.........
		.........
		.........
		}
		else
			printf("Errore nell'allocazione della memoria \n'");
		fclose(nomefile);
	}
	else
		printf("Errore nell'apertura del file\n'")
}
Ho delle difficoltà a capire come muovermi nel file. Grazie in anticipo.

2 Risposte

  • Re: [C]Muoversi all'interno di un file. Esercizio[PROBLEMA]

    fscanf
  • Re: [C]Muoversi all'interno di un file. Esercizio[PROBLEMA]

    Grazie, adesso però ho elaborato un main per provare la funzione e mi ritrovo con diversi problemi:
    1)Nella funzione, ho scritto un "else if" (else if(numero_considerato=='\n')) che dovrebbe controllare se nel file viene effettuato un "a capo" e quindi concludere la ricerca del numero più grande presente in quella riga (e ovviamente riempire l'array con quel valore). Purtroppo quella condizione non si verifica mai (ho controllato con una printf). Come posso impostare questa condizione?
    2) La funzione attualmente stampa l'array "top" che alloca, che non venendo ovviamente modificato è composta da soli zero. Quando lo stesso array viene però stampato nel main i valori sono sballati. Sto sbagliando qualcosa nel passaggio alla funzione?
    
    void riempi_array(char* nomefile, int *top, int n);
    int main(int argc, char * argv[]){
    	char filename[NAME_MAX];
    	int *top, n, i;
    	printf("Inserisci intero \n");
    	scanf("%d", &n);
    	printf("Inserisci nome file\n");
    	scanf("%s", filename);
    	riempi_array(filename, top, n);
    	printf("I numeri maggiori trovati nel file sono: \n");
    	for(i=0; i<n; i++)
    		printf("%d ", top[i]);
    	printf("\n");
    	
    	return 0;
    	}
    void riempi_array(char* nomefile, int *top, int n){
    	FILE *fp;
    	int indice_array, numero_considerato, numero_maggiore, flag, i;
    	numero_maggiore=0;
    	indice_array=0;
    	flag=0;
    	if((fp = fopen(nomefile, "r"))){
    		if(top = (int*)malloc(n * sizeof(int))){
    			while((fscanf(fp, "%d", &numero_considerato)!=EOF)&&(flag!=1)){
    				if(numero_considerato>numero_maggiore)
    					numero_maggiore=numero_considerato;
    				else if(numero_considerato=='\n'){
    					top[indice_array]=numero_maggiore;
    					indice_array++;
    					numero_maggiore=0;
    					if(indice_array==n-1)
    						flag=1; /*array pieno, non considero le altre righe */
    				}
    			}
    		}	
    		else
    			printf("Errore nell'allocazione della memoria \n'");
    		fclose(fp);
    	}
    	else
    		printf("Errore nell'apertura del file\n'");
    	printf("I numeri maggiori trovati nel file (funzione) sono: \n");
    	for(i=0; i<n; i++)
    		printf("%d ", top[i]);
    	printf("\n");
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte