Newsgroup: it.comp.lang.c
Titolo: Controllo input

Se io metto un input in cui devo ricevere solo numeri, come lo controllo?
Ho letto della ctype.h ma non ho capito una cippa...
Grazie ciao

Devi usare la funzione isdigit() contenuta in ctype.h
--------------------------------
Inviato via 
http://usenet.libero.it

 Devi usare la funzione isdigit() contenuta in ctype.h
Ti ringrazio, devi scusarmi ma non sono esperto...
lo uso cosě?
if(isdigit(variabile_da_controllare))
o come?
Grazie ciao

 if(isdigit(variabile_da_controllare))
No,non funzia ho appena provato... bohhh

La variabile da controllare deve essere un int
int c = 9;
if (isdigit(c))
   printf("Numerico!");


 Se io metto un input in cui devo ricevere solo numeri, come lo controllo?
Devi intanto riceverli in un array di char e poi controllarli uno per
uno con la funzione isdigit().
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 
Cavolo l'avevo messa giusta, solo che sbagliavo l'else, cioč mettevo il 
codice d'errore in if e quello giusto in else... so scemo...
Grazie ciao

    printf("Numerico!");
Non ha alcun senso. Prova questo:
#include <stdio.h>
#include <ctype.h>
int main()
{
    if ( isdigit( '4' ) )
        printf( "4 e' numerico\n" );
    if ( isdigit( 'G' ) )
        printf( "G e' numerico\n" );
    if ( isdigit( 9 ) )
        printf( "9 e' numerico\n" );
    return 0;


 Non ha alcun senso. Prova questo:
Io ho messo:
if(isdigit(data))
data è la variabile che voglio sia solo numerica, e se legge caratteri 
ritorna alla richiesta data indicanto con printf che sono stati inseriti 
caratteri e non numeri...
perchè non dovrebbe andare bene?

A parte che la dichiarazione del prototipo di funzione prende come parametro
un intero, ma poi scrivere:
isdigit('G')
restituisce 0 ovvero che non si tratta di un numerico.
Questo perchè gli apicetti convertono, si il carattere in un codice ASCII,
ma il suo range va fuori da quello dei numeri ovvero tra 48 e 57. Il codice
ASCII di G = 71!!!
Quindi la funzione non restituisce un valore diverso da 0, ovvero "true".


scrivere:
 
int a = 9;
isdigit(a)
era solo un esempio per far capire. E' ovvio che se ha bisogno di una
funzione del genere, di sicuro non è quella di valutare una variabile che sa
bene contenere un numero!!!
non c'è bisogno di usare un char, scrivere:
int a = 'B';
isdigit(a)
E' LA STESSA COSA



Perché tu avevi scritto, se ricordo bene
int data = 9;
if ( isdigit( data ) ) ...
e ti aspettavi che la funzione restituisse true, il che chiaramente non
è.


 Quindi la funzione non restituisce un valore diverso da 0, ovvero "true".
Mi sa che hai un pochino frainteso il funzionamento della isdigit().
Rileggiti attentamente la relativa documentazione.


 E' LA STESSA COSA
Se scrivi
int a = 'B';
isdigit(a)
viene false.
Se scrivi
int a = '9';
isdigit(a)
viene true.
Ma se scrivi
int a = 9;
isdigit(a)
viene nuovamente false.
Chiaro ora?


Non c'era bisogno della tua delucidazione!
Cmq grazie per l'intenzione.


Allora, isalpha controlla i caratteri a-z giusto?
Se lo metto cosě dovrebbe controllare l'input.
inizio--
do
   {
    printf( "Inserisci la data come giorno-mese-anno: " );
     scanf( "%d", &data );
   }
while (isalpha(data));
fine--
Invece manco lo vede, anzi no, una volta l'ho compilato e lo 
controllava, solo che ripeteva il printf 4 volte e aspettava l'input 
giusto...boh!!!

 while (isalpha(data));
L'hai detto giusto prima: "isalpha() controlla i caratteri". Ora perché
gli fai controllare un intero?


 
Perchč se metto isdigit se ne frega lo stesso...
boh non ci capisco piů nulla...

 boh non ci capisco piů nulla...
Seguimi un attimo attentamente: anche la isdigit() controlla i
caratteri. Solo che ti dice se un dato carattere rappresenta o meno una
cifra numerica (quindi da '0' a '9'). Mentre la isalpha() ti dice se un
dato carattere č alfanumerico o meno. Tieni presente che si parla sempre
di caratteri, quindi di valori che č possibile contenere in un singolo
byte.
