PDA

Visualizza la versione completa : [QBASIC]controllo input


alex4988
25-02-2009, 19:26
Ciao ragazzi,
Ho un programma dove dovrei fare un controllo dell'input...Mi spiego meglio io devo controllare k il valore che l'utente immette sia solamente un numero e in caso contrario devo fargli ripetere la domanda qualcuno di voi per caso saprebbe aiutarmi?

Grazie mille

MItaly
25-02-2009, 19:28
Se non ricordo male quando usi INPUT con una variabile numerica, se l'utente inserisce caratteri non numerici QBASIC provvede automaticamente a chiedere nuovamente un input valido all'utente.

alex4988
25-02-2009, 19:29
se metto l'intero lui mi fa la domanda ma io vorrei controllare questa domanda...Vorrei che quella domanda non uscisse e la farei uscire io tramite qualche condizione,ciclo,istruzione...

oregon
25-02-2009, 19:52
Allora per l'input usa una variabile stringa e poi controllane il contenuto.

alex4988
25-02-2009, 23:49
si ma come faccio a controllarne il contenuto?

MItaly
26-02-2009, 00:11
Con la funzione MID$ puoi prendere un carattere alla volta e verificare che sia un numero.

oregon
26-02-2009, 08:31
Originariamente inviato da alex4988
si ma come faccio a controllarne il contenuto?

Si presuppone che tu conosca le basi del linguaggio ... ci sono le funzioni di estrazione di sottostringa come Left$, Mid$ ... quelle di ricerca Instr, quelle per la trasformazione in numero come la Val ...

Dopo aver inserito la stringa, devi opportunamente usare queste funzioni ...

alex4988
28-02-2009, 18:37
scusate ma io nn ho ancora capito come funziona mi stò sforzando in tt i modi di capire ma nn ci riesco.Metto qua una porzione di codice:


cls
INPUT a
PRINT a

Sul display in questo modo visualizzo tutto il contenuto dai numeri alle lettere ma io invece voglio visualizzare solo i numeri o meglio ancora se l'utente immette per caso una lettera vorrei k gli venga richiesto di immettere l'input(qst lo posso fare con un ciclo do loop while se conosco correttamente la funzione da usare).

Gentilemnte potreste scrivermi come lo fareste voi io per il momento avevo risolto così:



DO
PRINT "Dammi un valore numerico"
DIM a AS STRING, b AS INTEGER
INPUT a
b = VAL(a)
LOOP WHILE VAL(a) = 0


però facendo così la "e" nn viene preclusa poichè in matematica è associtao ad un numero...

oregon
28-02-2009, 18:43
Dentro al ciclo inseriscine un altro (con una For ...) in cui controlli carattere per carattere il contenuto di a usando la mid$

Se non e' un carattere compreso tra "0" e "9" (includi magari anche il punto decimale) allora indica la condizione d'errore e ripeti comunque la while

alex4988
28-02-2009, 22:18
Originariamente inviato da oregon
Dentro al ciclo inseriscine un altro (con una For ...) in cui controlli carattere per carattere il contenuto di a usando la mid$

Se non e' un carattere compreso tra "0" e "9" (includi magari anche il punto decimale) allora indica la condizione d'errore e ripeti comunque la while
ho provato a fare così:


dim str as string
dim num as string
dim lunghezza as integer
dim indice as integer
dim continua as integer
continua=1
indice=0

do
if continua=0 then print "Attenzione! Inserire solo numeri"

print "inserire n"
input str
lunghezza=len(str)

do
num=mid(str,indice,1)

select case num
case "0" ,"1" ,"2" , "3" ,"4" , "5" ,"6" , "7" ,"8" , "9"
continua=1
case else
continua=0
end select

indice=indice+1

loop while indice<>lunghezza OR continua<>0

loop while continua=0

ma ancora nulla mi da problemi sul mid...Mi dà mismatch...nn ho usato for ma è la stessa identica cosa in teoria in questo modo...

Loading