Oppure

Loading
26/11/08 17:57
Cesaruz
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 26/11/08 18:00
aaa
26/11/08 19:06
pierotofy
Emm... il codice per favore?
Il mio blog: piero.dev
28/11/08 11:43
Cesaruz
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:
aaa
28/11/08 12:22
gioser
devi controllare il valore di ritorno della scanf.

    int risp;
    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--->");
        if (0 == scanf("%d",&risp))
        {
            char buf[100];
            gets(buf);
            printf("errore, scelta non valida\n");
        }
        else
        {
            switch(risp)
            {
            case 1:
                    break;
            case 2:
                    break;
            case 3:
                    break;
            case 4:
                printf("esco\n");
                break;
            default:
                printf("errore, scelta non valida\n");
                break;
            }
        }
    }while(risp!=4); 


Ciao :)
Ultima modifica effettuata da gioser 28/11/08 12:35
aaa
28/11/08 15:17
Cesaruz
Grazie mille:k:
aaa
29/11/08 7:13
Cesaruz
grazie di nuovo funziona perfettamente..8-)
Però non riesco a capire come fa funzionare...
potreste spiegarmelo??
Grazie anticipatamente:k:
aaa
01/12/08 9:46
gioser
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 :)




aaa
01/12/08 17:51
pierotofy
Anche se gets() sarebbe sconsigliata da usare... è a rischio di buffer overflow.
Il mio blog: piero.dev