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.