Fscanf() problematica

di il
3 risposte

Fscanf() problematica

Salve ragazzi, potrebbe sembrare un problema banale ma non riesco a venirne a capo, non e' la prima volta che mi succede. Il problema e' il seguente:

Nel codice vi lascio un commento dove vi spiego il problema.
void ScrFile(char File[])
{
   FILE *fp; int fc;
   char Scelta, Parola[15];   
   fp= fopen(File,"w");
   if(fp==NULL) perror("Errore nell'apertura del file");
   
   printf("Vuoi inserire una parola nel file? (S/N) \n"); //QUI E' DOVE SI FERMA IL PROGRAMMA, NON VA AVANTI, SALTA LO SCANF E DI CONSEGUENZA NON ENTRA NEL WHILE
   scanf("%c", &Scelta);
   
   while(Scelta == 'S')
   {
      printf("Inserisci una parola: ");
      fscanf(fp,"%s",Parola);
      
      printf("\n Vuoi inserire un'altra parola? ");
      scanf("%c", &Scelta);
   }
   
   fc=fclose(fp);
   if(fc!= 0) perror("Errore nella chiusura del file");  	
}

3 Risposte

  • Re: Fscanf() problematica

    Ho provato il tuo codice. Il problema è di natura logica. la fscanf() è una funzione che acquisisce dal file( passato come parametro), a differenza della scanf che acquisisce da tastiera. Se il file è vuoto,allora sorge il problema . Dalla printf intuisco che tu voglia acquisire da stdin, perciò sosituisci la fscanf con una scanf ,poi utilizza la fprintf per scriverci su. Un altro consiglio che voglio darti è quello di verificare opportunamente il miglior modo per aprire un file ,questo perchè utilizzando sempre "w" il file viene aperto in scrittura. Ciò comporta che se il file non esiste allora viene creato, in caso contrario aprirà quel file preesistente e la testina sarà posizionata all inizio di esso . Insomma rischi di sovrascrivere su qualcosa che magari ti serve. Spero di esserti stato d'aiuto.
  • Re: Fscanf() problematica

     /* una cosa del genere */
    Printf("Vuoi inserire una parola nel file? (S/N) \n"); //QUI E' DOVE SI FERMA IL PROGRAMMA, NON VA AVANTI, SALTA LO SCANF E DI CONSEGUENZA NON ENTRA NEL WHILE
       scanf("%s", &Scelta);
    
       while(Scelta == 'S')
       {
          printf("Inserisci una parola: ");
          scanf("%s",Parola);
          fprintf(fp,"%s ",Parola);
    
    
          printf("\n Vuoi inserire un'altra parola? ");
    
          scanf("%s", &Scelta);
       }
       
    N.B. ho sostituito il parametro .a %c a %s in modo da "pulire" la variabile Scelta ad ogni nuova acquisizione.
  • Re: Fscanf() problematica

    Grazie, siete stati molto d'aiuto
Devi accedere o registrarti per scrivere nel forum
3 risposte