Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

Domanda programmazione (sono nabbo)
(Questo messaggio è stato modificato l'ultima volta il: 24/05/2014, 23:59 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
Sullo scanf c'è qualcos'altro da dire...
dopo l'esempio di Cyan, a qualcuno potrebbe venire in mente di dire, allora metto un ciclo che continua a chiedere all'utente l'input finchè non lo scrive giusto, una cosa tipo:

    C Programming
  1. int ret=0;
  2. float value=0;
  3. while (!ret)
  4. {
  5. ret=scanf("%f",&value);
  6. }



sorpresa! non funziona... perchè ? perchè scanf ha un comportamento subdolo quando gli diamo in input qualcosa che non interpreta nel modo giusto.
Diciamo che invece di scrivere in input un "10.5" scriviamo "A" e diamo invio.
Scanf ci restituisce 0, quindi il ciclo torna a eseguire scanf, ma il carattere A è ancora nel buffer dello STDIN! quindi rivà in errore e torna ad eseguire scanf all'infinito! senza chiedere piu l'input all'utente.

Qualcuno per ovviare a questi problemi preferisce un approccio diverso, ovvero leggere l'input in una stringa e poi eseguire sscanf sull stringa per ottenere lo stesso comportamento.
Però essendo l'input in una stringa ci è piu facile maneggiare la stringa per correggere eventuali errori oppure limitarci ad azzerarla per richiedere un nuovo input, magari senza l'errore sta volta.
Un esempio di codice potrebbe essere questo:

    C Programming
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int read=0;
  6. char buffer[256];
  7. float value;
  8.  
  9. while (!read)
  10. if (fgets(buffer, sizeof(buffer), stdin))
  11. {
  12. if (read=sscanf(buffer, "%f", &value))
  13. {
  14. printf("%f\n",value);
  15. } else
  16. {
  17. buffer[0]=0;
  18. }
  19. }
  20. }




digger
24/05/2014, 23:58
#3
Cerca


Messaggi in questa discussione
RE: Domanda programmazione (sono nabbo) - da digger - 24/05/2014, 23:58

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Linguaggi di Programmazione Lelep0w4 10 1,590 20/11/2013, 17:35
Ultimo messaggio: Lelep0w4
  Aiuto programmazione xFrancesco 7 1,311 16/12/2012, 20:49
Ultimo messaggio: pauldomy
  Domanda:Link per c++??? Pocciox 16 2,436 19/09/2012, 23:12
Ultimo messaggio: Pocciox



Utenti che stanno guardando questa discussione: 1 Ospite(i)