Probelma fgets()

di il
16 risposte

Probelma fgets()

Come faccio a svuotare il buffer della scanf?
per intenderci se chiamo una scanf prima di una fgets:
esempio:
char s[10];
int i;
scanf("%d",&i);
fgets(s,10,stdin);
printf(s);

rimane bufferizzato l'invio che do per memorizzare l'intero nella scanf e non mi fa inserire la stringa

16 Risposte

  • Re: Probelma fgets()

    Una funzione di questo tipo dopo ogni scanf dovrebbe funzionare:
    
    void
    clear (void)
    {
      while ( getchar () != '\n' );
    }
  • Re: Probelma fgets()

    Cerca di evitare la fscan(): non è sicura in quanto non ha limiti nei caratteri che legge (se le passi una stringa di 10 caratteri, se l'utente inserisce 11 caratteri per lei va bene lo stesso, ma tu sfori nel tuo buffer!)
    Usa sempre gets() o fgets().
    Se vuoi leggere un intero puoi fare atoi(gets(buff...)).
    Il buffer (nel tuo caso s[]) non farlo della dimensione esatta che ti serve! Considera che l'utente potrebbe inserire tanti caratteri... metti ad esempio char s[80];
    Dati questi suggerimenti, riscrivi così:
    char s[80];
    int i;
    fgets(s,80,stdin);
    i = atoi( s );
    printf( "%d\n", i );
    fgets(s,80,stdin);
    printf(s);
  • Re: Probelma fgets()

    Infatti funziona pero non mi è chiaro cosa fa
  • Re: Probelma fgets()

    Si altrimenti potrei imbattermi in un bufferoverflow ma quindi è rischioso anche per acquisire un intero?
  • Re: Probelma fgets()

    Io mi sento di sconsigliare l'utilizzo di fflush(stdin), in quanto il suo comportamento, quando viene passato come parametro stdin è non definito.

    http://www.gidnetwork.com/b-57.htm
  • Re: Probelma fgets()

    Ma con un while( getchar()!='\n'); dopo ogni scanf il problema viene risolto no?
  • Re: Probelma fgets()

    Si mettendo qulla funzione dopo ogni scanf funziona ma cosa fa esattamente while(getchar() != `\n')???
  • Re: Probelma fgets()

    Qui c'è un esempio che dovrebbe chiarire:
  • Re: Probelma fgets()

    Il consiglio è molto semplice: non usare scanf()!!!
  • Re: Probelma fgets()

    Atoi acquisisce anche double?
  • Re: Probelma fgets()

    Usa atof()
  • Re: Probelma fgets()

    Per i caratteri semplicemente getchar?
  • Re: Probelma fgets()

    Prendi il primo carattere del buffer che leggi con fgets()
  • Re: Probelma fgets()

    Sarebbe meglio comprare un buon manuale,i nomi comunque sono quasi semplici:

    atoi == AsciToInteger
    atof == AsciToFloat

    e cosi via.
Devi accedere o registrarti per scrivere nel forum
16 risposte