Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Loop
Forum - C/C++ - Loop

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 18:57
Mercoledì, 26/11/2008
Ciao a tutti:k:Ho un problema con la risposta che acquisisci dall'utente prima dello switch.Infatti lo switch fuziona solo con variabili intere quindi se l'utente mette un carattere il ciclo va in loop.Quindi vorrei fare un ciclo di controllo sulla scelta dell'utente.Come posso fare???:D
Grazie anticipatamente a tutti.8-)

Ultima modifica effettuata da Cesaruz il 26/11/2008 alle 19:00
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:06
Mercoledì, 26/11/2008
Emm... il codice per favore?


Il mio blog: https://piero.dev
PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 12:43
Venerdì, 28/11/2008
do{
      printf("\nCosa si vuole fare? \n");
      printf("1-Prelevare del credito\n");
      printf("2-Visualizzare saldo attivo\n");
      printf("3-Movimenti effetuati\n");
      printf("4-Chiudi\n");
      printf("Inserire scelta--->");
      scanf("%d",&risp);
      switch(risp){
}while(risp!=4);
Questo è il codice...quindi se con la scanf acquisico un carattere il ciclo do/while va in loop.
Come posso fare??
Grazie anticipatamente.:k:

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 13:22
Venerdì, 28/11/2008
devi controllare il valore di ritorno della scanf.

Codice sorgente - presumibilmente C/C++

  1. int risp;
  2.     do{
  3.  
  4.         printf("\nCosa si vuole fare? \n");
  5.         printf("1-Prelevare del credito\n");
  6.         printf("2-Visualizzare saldo attivo\n");
  7.         printf("3-Movimenti effetuati\n");
  8.         printf("4-Chiudi\n");
  9.         printf("Inserire scelta--->");
  10.         if (0 == scanf("%d",&risp))
  11.         {
  12.             char buf[100];
  13.             gets(buf);
  14.             printf("errore, scelta non valida\n");
  15.         }
  16.         else
  17.         {
  18.             switch(risp)
  19.             {
  20.             case 1:
  21.                     break;
  22.             case 2:
  23.                     break;
  24.             case 3:
  25.                     break;
  26.             case 4:
  27.                 printf("esco\n");
  28.                 break;
  29.             default:
  30.                 printf("errore, scelta non valida\n");
  31.                 break;
  32.             }
  33.         }
  34.     }while(risp!=4);



Ciao :)

Ultima modifica effettuata da gioser il 28/11/2008 alle 13:35
PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 16:17
Venerdì, 28/11/2008
Grazie mille:k:

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 8:13
Sabato, 29/11/2008
grazie di nuovo funziona perfettamente..8-)
Però non riesco a capire come fa funzionare...
potreste spiegarmelo??
Grazie anticipatamente:k:

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 10:46
Lunedì, 01/12/2008
la funzione scanf restituisce il numero di valori che ha letto correttamente.

la tua scanf si aspetta un numero intero.
quando qualcuno inserisce un carattere invece di un intero, la scanf restituisce che ha letto zero valori.

Ma la scanf NON RIMUOVE il carattere dal buffer dello standard input, per forzarne la rimozione, in questo esempio ho usato la gets(), che rimuove tutto fino al \n. (sicuramente si può fare di meglio che usare la dgets(), che nel caso l'utente introducesse + caratteri della dimensione del buffer prima del newline porterebbe a un buffer overflow...)

La morale è che bisogna controllare sempre i valori di ritorno delle funzioni e gestire tutte le situazioni.

ciao :)





PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:51
Lunedì, 01/12/2008
Anche se gets() sarebbe sconsigliata da usare... è a rischio di buffer overflow.


Il mio blog: https://piero.dev
PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 11:20
Martedì, 02/12/2008
Testo quotato

Postato originariamente da pierotofy:

Anche se gets() sarebbe sconsigliata da usare... è a rischio di buffer overflow.



yep, nell'ultimo post ho scritto anche questo... :)

visto che siamo in argomento, tu hai idea di un modo migliore di svuotare lo standard input?
sui programmini a riga di comando ti confesso che sono un po' arrugginito e mi è rimasta la curiosità di come si potrebbe fare..

Ultima modifica effettuata da gioser il 02/12/2008 alle 11:39
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo