|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
[C/C++] Gestione input tastiera
Salve a tutti,
Mi potreste suggerire un semplice ma efficace algoritmo per gestire l'input da tastiera in un semplice programma console? Le situazioni per cui vorrei avere una soluzione efficace: 1) scelta tra 1 e 2. Se premo 0 o 3 o una lettera o numero + lettera/simbolo/spazio, messaggio di errore e possibilità di reinserire. 2) scelta s o n. Se premo altro o metto un numero o numero/letterasimbolo + mumero/lettera simbolo, messaggio di errore e possibilità di reinserire. Grazie.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 72
|
Se il programma lo scrivi in c non è per niente complicato:
1)fai un ciclo do-while però hai bisogno di specificare qual'è il tasto per uscire(ad es io uso il 9): int letto; do{ printf("Inserisci 1 per:....\n2 per:.....\n9 per uscire"); scanf("%d",&letto); switch (letto){ case 1: cosa deve fare.....; break; case 2: cosa deve fare.....; break; case 9: break; default: printf("Errore!!!\n\n"); break; } }while(letto!=9); 2)è uguale a quello sopra però al posto di usare un int usi un char. spero di esserti stato di aiuto!ciao |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
Torno solo ora sull'argomento
Comunque, devo cercare di costruire una funzione comoda comoda con un'interfaccia furba che mi consente di chiamarla e piegarla alle varie esigenze. Per esempio: Voglio inserire un qualsiasi numero (1, 16, 10000...), ma non una lettera. Se in input metto per esempio la lettera "a" (o qualcosa di diverso da una cifra) quando mi chiede un numero, voglio che venga segnalato l'errore. Qual è la condizione che fa stampare il messaggio d'errore + relativa rischiesta di reinserimento del dato?
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
Quote:
la funzione della libreria ctype.h int isalpha ( int c );
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB |
|
|
|
|
|
|
#5 |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21999
|
la funzione la crei e la tari come vuoi tu ma non è niente di complicato
puoi fare una cosa semplice così char cscelta; int iscelta; bool berr; do{ system("cls"); cout<<"Menu\n"; cout<<"1)XXXXXX\n"; cout<<"2)XXXXXX\n"; cout<<"3)XXXXXX\n"; cout<<"4)XXXXXX\n"; cout<<"scelta: "; cin>>cscelta; iscelta=atoi(cscelta) if(iscelta>0)&&(iscelta<5) {berr=false;} else { cout<<"Errore\n"; system("pause"); berr=true; } }while(berr==true);
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
Quote:
Pensavo di combinarla a isalnum per escludere totalmente l'inserimento di un simbolo diverso da un numero, sempre che una non contenga anche gli scopi che raggiunge l'altra. Vorrei inserirle in un while ma non ho chiaro il procedimento.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
Ho giocherellato un po' con la isalpha e devo dire che fa proprio bene il suo lavoro.
L'ho implementata in modo molto semplice in un programma d hoc: Codice:
#include <cstdlib>
#include <iostream>
#include <ctype.h>
int isalpha (int ch);
using namespace std;
int main(int argc, char *argv[])
{
char c;
cout << "Inserire un numero"<<endl;
cin >> c;
while (isalpha (c))
{
cout << "Errore, è stata inserita la lettera "<< c << "Ripetere"<<endl;
cin >> c;
}
cout << "Il numero inserito è: "<< c <<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Se inserisco una lettera in effetti posso segnalare l'errore. Ha però un limite. Se io inserisco 99 e gli faccio stampare il numero, lui mi restituisce 9 e non 99. Se inserisco per esempio asd9 mii segnala Errore, è stata inserita la lettera a Ripetere Errore, è stata inserita la lettera s Ripetere Errore, è stata inserita la lettera d Ripetere Il numero inserito è 9. Vorrei che si fermasse alla prima lettera che incontra per invalidare la digitazione. E vorrei che mi restituisse 99 invece di 9. Any idea?
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:14.




















