[c] FILE, fprintf, array di struct

di il
2 risposte

[c] FILE, fprintf, array di struct

Bungiorno, vorrei un chiarimento.
Ho scritto un programma perfettamente funzionante che è un inizio di anagrafica. Il programma è questo:

#include <stdio.h>


typedef struct{
	char nome[20];
	char cognome[20];
	char sesso;
	int anno;
	} dipendente;
	
main()
{
	printf("\n\n");
	dipendente d1[20]; // non c'è bisogno che sia array perché li passo su file
	FILE* fp;
	int i, j;
	char uscita;
	char appoggio;
	int res;
	
	i=0;
	do{//INIZIO DO
	fp=fopen("dipendenti.txt", "w");
	
	
	printf("\n\n Inserisci il NOME del dipendente %d: ", i+1);
	scanf("%s", d1[i].nome);
	
	printf("\n\n Inserisci il COGNOME del dipendente: ");
	scanf("%s", d1[i].cognome);
	
	printf("\n\n Inserisci il SESSO  (M/F): ");
	scanf("%s", &d1[i].sesso);	
	scanf("%c", &appoggio);
	
	printf("\n\n Inserisci l'ANNO di nascita del dipendente: ");
	scanf("%d", &d1[i].anno);	
	
	printf("\n\n Fine dell'inserimento dati del dipendente");
		scanf("%c", &appoggio);
	i++;
	
	//ISTRUSIONI PER USCITA ANTICIPATA DAL CICLO
	if (i%2==0) {	printf("Premi il tasto 'u' per uscire: "); 	scanf("%c", &uscita);	}
	if (uscita=='u') {j=i; i=20;	}
	

	}while(i<20);//FINE DO
	
	//Controllo a che numero è la variabile
	printf(" La variabile i e' uaguale a: %d", i);
	printf(" La variabile j e' uaguale a: %d", j);
	
	
		if(fp==NULL) printf("Problemi nell'apertura del file");
	else {//INIZIO ELSE RES
	
	for(i=0;i<j;i++){
	
	res=fprintf(fp, "%s %s %c %d", d1[i].nome, d1[i].cognome, d1[i].sesso, d1[i].anno);
		}
		
		}//FINE ELSE

	fclose(fp);


}
Ho voluto apportare una modifica e portare la fprintf subito vicino alla sezione dell'inserimento dati. Il programma non funzionante è questo:
#include <stdio.h>


typedef struct{
	char nome[20];
	char cognome[20];
	char sesso;
	int anno;
	} dipendente;
	
main()
{
	printf("\n\n");
	dipendente d1[20]; // non c'è bisogno che sia array perché li passo su file
	FILE* fp;
	int i, j;
	char uscita;
	char appoggio;
	int res;
	
	i=0;
	do{//INIZIO DO
	fp=fopen("dipendenti.txt", "w");
	
	
	printf("\n\n Inserisci il NOME del dipendente %d: ", i+1);
	scanf("%s", d1[i].nome);
	
	printf("\n\n Inserisci il COGNOME del dipendente: ");
	scanf("%s", d1[i].cognome);
	
	printf("\n\n Inserisci il SESSO  (M/F): ");
	scanf("%s", &d1[i].sesso);	
	scanf("%c", &appoggio);
	
	printf("\n\n Inserisci l'ANNO di nascita del dipendente: ");
	scanf("%d", &d1[i].anno);	
	
	printf("\n\n Fine dell'inserimento dati del dipendente");
		scanf("%c", &appoggio);

	
	if(fp==NULL) printf("Problemi nell'apertura del file");
	else {//INIZIO ELSE RES	
	res=fprintf(fp, "%s %s %c %d", d1[i].nome, d1[i].cognome, d1[i].sesso, d1[i].anno);
		
		}//FINE ELSE
		i++;
	//ISTRUSIONI PER USCITA ANTICIPATA DAL CICLO
	if (i%2==0) {	printf("Premi il tasto 'u' per uscire: "); 	scanf("%c", &uscita);	}
	if (uscita=='u') {j=i; i=20;	}
	

	}while(i<20);//FINE DO
	
	//Controllo a che numero è la variabile
	printf(" La variabile i e' uaguale a: %d", i);
	printf(" La variabile j e' uaguale a: %d", j);
	
	

	

	fclose(fp);


}
Il risultato è che scrive solo il primo blocco di dati. Sembra un problema legato o all'indice dell'array o del puntatore. Non capisco!
Grazie.

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte