Proteggere la scanf("%d");

di il
2 risposte

Proteggere la scanf("%d");

Ciao.
Mi sto chiedendo e non riesco a trovare una soluzione, sul come è possibile proteggere la scanf%d
dall'errata immissione di dato.
Il %d riceve un intero, ma qual'ora un utente gli scriva un carattere, il programma salta.
Come posso proteggermi?
Ho pensato di mettergli una if che dica di tenere presente solo dei dati compresi tra 0 e 9 e di conseguenza escludere tutti gli altri.
Potrei usare anche la funzione isdigit(), mi viene ora in mente;
Ma isdigit() però riceve un argomente di tipo %c.
Sto cercando una cosa impossibile oppure posso proteggere la mia scanf("%d")
Non ditemi di cambiare il dato acquisito con %s oppure %c.
Io voglio proteggere la mia scanf("%d") da un dato errato.
Solo che non appena la scanf legge un dato diverso da un intero mi salta il programma, quindi non ho modo di controllarlo.
Oltretutto se dovessi accettare un carattere di tipo %c sono costretto a traslare il dato acquisito(codice ascii) nel numero che voglio interpretare, tenendo presente oltretutto che %c riceve un carattere e non una serie di caratteri

2 Risposte

  • Re: Proteggere la scanf("%d");

    Lo sai che scanf ritorna un intero? Sai valutare cosa sto intero restituisce?
    #include <stdio.h>
    
    int main()
    {
    	int i = 0;
    	int ret = 0;
    	ret = scanf("%d",&i);
    	if(!ret)
    	{
    		printf("Di nuovo");
    	}
    	else
    	{
    		printf("OK");
    	}
    	return 0;
    }
  • Re: Proteggere la scanf("%d");

    Non ho provato a scrivere il codice ma credo di capire dove vuoi parare. Forse dico una stupidaggine, però magari restituisce 1 oppure 0?
    Mi sembra di aver detto una fesseria. Cmq provero' il tuo codice.....

    Testato
    restituise 1 || 0

    Quindi quando %d, non riceve un numero, la scanf restituisce FALSO (0)
    A questo punto "cicla" all'infinto xkè la scanf non è in grado di restiture "una condizione di verità" VERO (1)
    Quando trova il numero restituisce un valore di VERO (1) e si ferma.
    Dovrebbe essere questa la logica della funzione scanf e credo tutte le funzioni.
    Peccato non esserci arrivato da solo

    Posso farti una domandona?

    la funzione "rand" ha dei valori pseudocasuali, la funzione scanf ha delle sue istruzione come anche la funzione isaplha().

    Se io volessi guardare dentro la funzione, quindi vedere le istruzioni scritte nella printef(), e nelle altre come posso fare?
    Per essere più esplicito se io ad esempio volessi vedere e modificare , i numeri scritti all'interno della funzione rand come posso farlo?
    Dovrei aprire un il file contenente le librerie <stdio.h>?
Devi accedere o registrarti per scrivere nel forum
2 risposte