Newsgroup: it.comp.lang.c
Titolo: controllo numero inserito

vorrei che venisse immesso un numero int non superiore ai limiti
fisici dell'int, come fate per controllare che non vengano inseriti
caratteri alfanumerici o numeri superiori al limite dato?
Aranar
e-mail: 
ro...@geocities.com
http://www.nettaxi.com/citizens/Aranar/
   (above all VgaPlanets)
http://www.tempolibero.com/user/aranar
    (sopratutto VgaPlanets)

 caratteri alfanumerici o numeri superiori al limite dato?
Con la stessa tecnica di cui sopra che però non ti permette di
controllare e rifiutare i singoli tasti ma solo di fare una verifica a
dato inserito completamente. La monitorizzazione dei singoli tasti ho
paura che con le funzioni standard non si possa fare. Devi utilizzare
funzioni non standard tipo la getch().
EMG

di inserirlo nella variabile di tipo int.
mi sarebbe piaciuto usare lo scanf, pero' ho notato che, ad esempio,
specificando %u ed inserendo poi un numero con segno negativo lo scanf
legge non il numero inserito ma 65536 - numero inserito


 legge non il numero inserito ma 65536 - numero inserito
e provando &i ?
--
Alessandro Monti

e provando &i ?
ma %i non legge numeri ottali/esadecimali ecc?
volevo specificare di leggere un unsigned int


 volevo specificare di leggere un unsigned int
No, allora devo capire.
Tu vuoi che legga un numero. Fin qui ci siamo.
Il numero deve essere un intero, per cui non un float, tanto per capirci.
Inoltre il tuo programma li vuole unsigned, giusto?
E allora mi spieghi perchč mai poi gli passi i numeri negativi? Non ti pare
che ci sia una piccola contraddizione? Scrivendo che il tuo codice deve
accettare un unsigned, č come se dicessi al compilatore: "Voglio un intero
SENZA SEGNO. HO DETTO SENZA SEGNO, CAPITO? SE TI AZZARDI A METTERMI UN
NUMERO NEGATIVO NELLA MIA BELLA VARIABILE UNSIGNED, TI BUTTO DALLA FINESTRA
E PASSO ALLA CONCORRENZA".
Dopodichč, se non ho capito male, durante l'esecuzione tu passi un numero
negativo al tuo programma (dopo che il compilatore ha cercato di fare del
suo meglio per eliminare i valori con segno), e pretendi cosa? Che il
programma sia in grado di riconoscere un numero negativo, memorizzarlo ed
usarlo per i tuoi nebulosi scopi? Che ne prenda il valore assoluto
(positivo) semplicemente ignorando il segno? Che ne calcoli il complemento a
uno? Che ne calcoli il complemento a due? Che ritorni zero? Che ritorni
65536? (numero strano, avrei detto che avrebbe ritornato 65535).
Nel dubbio, il compilatore ha deciso che, forse ma forse, volevi che i
numeri negativi fossero ignorati e considerati come il numero intero piů
grande rappresentabile dalla variabile che hai scelto di usare. Ha
sbagliato?
--
Alessandro Monti

caratteri alfanumerici o numeri superiori al limite dato?
Un metodo sarebbe quello di convertire in stringa il valore massimo
degli interi. 
Ad esempio, se il mio unsigned occupa 16 bit, posso convertire in
stringa MAX_INT_STR il valore 2^16-1 = 65535 e avere quindi 
MAX_INT_STR = "65535"
Poi chiedo il numero sotto forma di stringa e lo riempio con zeri
iniziali, ad esempio 
"5467" --> "05467" e confronto (con le routine di confronto tra
stringhe) i due valori : 
"05467" > "65535" = falso.
Se l'utente immette, invece, "74345" ottengo vero.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------