PDA

Visualizza la versione completa : verificare il valore di una scanf


tridi9
28-03-2003, 16:21
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 ?

l.golinelli
28-03-2003, 17:10
Spiegati meglio... :master:

tridi9
28-03-2003, 17:18
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);

tato83
28-03-2003, 21:15
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?

tridi9
29-03-2003, 17:09
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 ?

r0x
29-03-2003, 17:56
scanf() restituisce il numero di input validi, quindi in questo devi verificare che effettivamente restituisca 1:



#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.

debbelandia
29-03-2003, 17:58
#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

tridi9
30-03-2003, 15:12
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'.

Loading