Ciao mi sono appena iscritto e vi saluto tutti.
Sono alle prese con il C e avrei bisogno, se possibili, di un aiutino.
Sto studiando la gestione dei files e creando quindi i primi semplici programmini.
Ho una funzione scanf() che viene saltata a piè pari dopo il richiamo di una funzione.
Mi spiego meglio (e copio e incollo anche il codice in questione): la prima invocazione di scanf va bene ma, dopo aver richiamato una funzione che chiama al suo interno una fscanf, la chiamata successiva viene saltata completamente!
Ho letto da diverse parti le tecniche per lo svuotamento del buffer di input ma non hanno funzionato.
Il problema sembra sorgere per l'inserimento di un EOF (tramite ctrl+Z) all'interno della funzione.
Insomma non mi raccapezzo più!!!
#include <stdio.h>
int creaFileConti(char *fileName);
struct conto
{
int id;
char cognome[30],
nome[30];
double saldo;
};
typedef struct conto Conto;
int main(void)
{
int (*menu[2])(char *param);
menu[0] = creaFileConti;
menu[1] = leggiFileConti;
printf("1 - crea file\n2 - leggi file\n3 - fine\n ? ");
int scelta;
char fileName[20];
scanf("%d%s", &scelta, fileName);
while(scelta!=3){
menu[scelta-1](fileName);
printf("1 - crea file\n2 - leggi file\n3 - fine\n ? ");
scanf("%d%s", &scelta, fileName);
}
return 0;
}
int creaFileConti(char *fileName)
{
FILE *cfPtr;
cfPtr = fopen(fileName, "w");
if(cfPtr==NULL)
{
printf("Problemi ad aprire il file\n");
return 0;
}
else
{
printf("Inserisci Id Cognome Nome Saldo\n ? ");
Conto nuovoConto;
fscanf(stdin,
"%d%s%s%lf",
&nuovoConto.id,
nuovoConto.cognome,
nuovoConto.nome,
&nuovoConto.saldo);
while(!feof(stdin)){
fprintf(cfPtr,
"%d %s %s %f\n",
nuovoConto.id,
nuovoConto.cognome,
nuovoConto.nome,
nuovoConto.saldo);
printf("Inserisci Id Cognome Nome Saldo\n ? ");
fscanf(stdin,
"%d%s%s%lf",
&nuovoConto.id,
nuovoConto.cognome,
nuovoConto.nome,
&nuovoConto.saldo);
}
fclose(cfPtr);
return 1;
}
}