Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346

    verificare il valore di una scanf

    Ciao ragazzi.
    Ho un problema in un esercizio :
    devo verificare se il parametro passato con una scanf
    sia un numero e non un carattere.
    Non riesco a trovare il modo per fare
    questa operazione :

    do
    {
    printf("Inserisci il numero degli alunni ");
    scanf("%d",&n);
    }while(n<=0 && n>=30);

    Se n non è numero compreso tra 0 e 30 allora riperi il ciclo
    il punto è che vorrei fare ripetere il ciclo
    verificando se si tratta di un carattere n.
    Cosa mi consigliate ?

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Spiegati meglio... :master:

  3. #3
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346
    Praticamente devo evitare l'input di un carattere al posto di un numero..

    ci sono riuscito cosi' ma mi succede che se metto + di 1 carattere il ciclo loppa quante volte sono i caratteri :

    do
    {
    n=0;
    printf("Inserisci il numero degli alunni ");
    scanf("%d",&n);
    getchar();
    }
    while(n <=0 || n >= 30);

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  4. #4
    Utente di HTML.it L'avatar di tato83
    Registrato dal
    Nov 2001
    Messaggi
    51
    Se ho capito bene tu vuoi che il ciclo venga ripetuto se il numero è minore di 0 e maggiore di trenta e se n è un carattere?E quato che ti serve?

  5. #5
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346
    Il ciclo si ripete se insrisco 0 o - di 0, oppure 30 o + di 30.

    La cosa che non capisco è che se inserisco un carattere il ciclo si ripete ma se ne inserisco due o tre il ciclo si ripete tante volte quante sono i caratteri che ho inserito.

    Che devo fare ?

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  6. #6
    scanf() restituisce il numero di input validi, quindi in questo devi verificare che effettivamente restituisca 1:

    codice:
    #include <stdio.h>
    
    int main()
    {
    	int n;
    
    	while( 1 )
    	{
    		printf( "Inserisci un numero da 1 a 30: " );
    
    		if( scanf( "%d", &n ) != 1 )
    		{
    			fprintf( stderr, "HO DETTO UN NUMERO! $&£%#@*\n" );
    			while( getchar() != '\n' );
    			continue;
    		}
    
    		if( ( n < 1 ) || ( n > 30 ) )
    		{
    			fprintf( stderr, "Da 1 a 30!\n" );
    			continue;
    		}
    
    		break;
    	}
    
    	return 0;
    }
    Ciao.

  7. #7
    Utente bannato
    Registrato dal
    Jan 2002
    Messaggi
    852
    #include <conio.h>
    #include <stdio.h>

    char controlla();

    void main(){
    scanf("%d",controlla());
    }

    char controlla() {
    int input = 0;

    do{
    input = getch();
    }while(input < 48 && input != 46 || input > 57);
    return char(input);
    }

    //bisogna inserire 2 volte il valore numerico e se alla seconda si inserisce un char....


    io userei solo il getch e verifico come ho fatto io poi insrisci il valore in una variabile

  8. #8
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346
    codice:
     
    
    	do
    	{
    		printf("\nInserisci il numero degli alunni ");
    
    		if( scanf( "%d", &n ) != 1 )//inserisco la scanf direttamente nella condizione
    		{							//dell'if e verifico se restituisce un valore diverso da 1 (1==inserimento corretto)
    
    			printf("\nInserire un numero non una lettera\n");
    			while( getchar() != '\n')//cicla fino a che getchar non è diversa da '\n' 
    			{						 // se inserisco aa cicla 2 volte ma perche ?  	
    			continue;
    			}
    		}
      		else
    			printf("\nvalore inserito corretto : %d",n);
        }
    	while( n <= 0  || n >= 30 );
    Grazie
    Ho capito ma non ho capito perchè cicla fino a trovare la
    getchar() != da '\n'.

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.