Validazione stretta

di il
6 risposte

Validazione stretta

Ciao a tutti.
Avrei una domanda relativa alla validazione stretta di numeri in input.
Vorrei sapere in che modo posso mettere la validazione per i numeri naturali.
Essi non devono essere minori di 0, e fin qui ci siamo, non devono essere lettere, e fin qui anche ci siamo, ma ho problemi nel mettere la validazione per i numeri con la virgola.
Infatti se inserisco un numero con la virgola, il programma mi dice che il numero inserito è sbagliato, ma me lo conta come buono, eliminando la parte decimale.
Come faccio per risolvere questo problema?
	
			printf("\nInserire valore: ");
			esito_ins = scanf("%d", &valore);
		
			if((valore < 0) || (esito_ins != 1))
			{
				printf("Il valore inserito non è corretto.\nRiprovare\n");
				
		
				while(getchar() != '\n');
			}

6 Risposte

  • Re: Validazione stretta

    I numeri naturali infatti non sono con la virgola. Usa scanf con %f per i float e %lf per i double. Poi si usa il punto non la virgola
  • Re: Validazione stretta

    Weierstrass ha scritto:


    I numeri naturali infatti non sono con la virgola. Usa scanf con %f per i float e %lf per i double. Poi si usa il punto non la virgola
    Appunto i numeri naturali non hanno la virgola. Appunto per questo quando l'utente inserisce un numero, ad esempio 2.3, deve dare come messaggio che il numero è errato e di reinserirlo. Invece mi da solo il messaggio e mi prende il numero come valido eliminando la parte decimale, in questo caso .3
  • Re: Validazione stretta

    Scusa come vorresti far riprovare se non inserisci tutto in un ciclo?
  • Re: Validazione stretta

    oregon ha scritto:


    Scusa come vorresti far riprovare se non inserisci tutto in un ciclo?
    	do
    	{	
    	printf("\nQuanti elementi vuoi inserire?  ");
    	esito = scanf("%d", &cardi);
    
    	
    	if((esito != 1) || ( cardi < 0))
    	{
    		printf("Il numero inserito non è corretto.\nRiprovare.\n");
    		while(getchar() != '\n');
    	}
    	else
    	{
    		if(cardi == 0)
    		{
    			printf("Insieme vuoto");
    		}
    		else
    		{
    		do
    		{
    			printf("\nInserire valore: ");
    			esito_ins = scanf("%d", &valore);
    		
    			if((valore < 0) || (esito_ins != 1))
    			{
    				printf("Il valore inserito non è corretto.\nRiprovare\n");
    				
    		
    				while(getchar() != '\n');
    			}
    			else
    			{	
    				p2 = malloc(sizeof(elem_insieme_t));
    				p2 -> valore = valore;
    				p2 -> p_next = p1;
    				p1 = p2;
    				i++;
    			}
    		
       		}while(i < cardi);
    		}
    	}
    	}while(esito != 1);
  • Re: Validazione stretta

    Quindi?
  • Re: Validazione stretta

    Smarties ha scritto:


    Weierstrass ha scritto:


    I numeri naturali infatti non sono con la virgola. Usa scanf con %f per i float e %lf per i double. Poi si usa il punto non la virgola
    Appunto i numeri naturali non hanno la virgola. Appunto per questo quando l'utente inserisce un numero, ad esempio 2.3, deve dare come messaggio che il numero è errato e di reinserirlo. Invece mi da solo il messaggio e mi prende il numero come valido eliminando la parte decimale, in questo caso .3
    Prova così
    
    #include <stdio.h>
    #include <string.h>
    
    int main() {
        int intero;
        double reale;
        char in[40] = {0};
        
        printf("\nInserire valore: ");
        if (fgets (in , 40 , stdin) != NULL){
            if(strchr(in, '.') != NULL){
                reale = atof(in);
                printf("\nIl valore inserito e' %.17lf", reale);
            }
            else{
                intero = atoi(in);
                printf("\nIl valore inserito e' %d", intero);
            }
        }
        
        getchar();
        return 0;
    }
Devi accedere o registrarti per scrivere nel forum
6 risposte