|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
if e cin con invio,frecce,canc,esc,..ecc..
Ciao a tutti mi scuso per il titolo strano ma non sapevo bene che titolo mettere perchè è una cosa un po' complicata da spiegare..visto che non sono bravo a spiegarmi vi faccio un esempio che così riesco a farmi capire meglio..io per esempio scrivo un programma che chieda se si vuole continuare o no.. naturalmente dovrò dichiarare la variabile risposta ci metterò cin >>risposta e infine metterò if che praticamente se l'utente inserirà s il porgramma continuerà se invece inserirà n il programma si chiuderà..se invece io volessi far inserire all'utente le frecce direzionali (cioè freccia su,in basso,sinistra e destra) o invio,canc (questi tasti diversi) ecc..come lo dovrei formulare con cin e if? perchè nell'esempio precedente avrei messo if (risposta =='s') quindi se l'utente metteva s il programma sarebbe continuato ma il problema che volevo utilizzare (per altri tipi di programmi) i tasti che avevo elencato prima ma non so come fare per farli inserire dal cine e per poi eleborare un if..scusate se mi sono spiegato malissimo ma non sapevo bene come spiegarvi...se avete delle domande fatemele pure per magari chiarire meglio.. vi ringrazio in anticipo per la vostra disponibilità..attendo una vostra risposta
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Non so se esistono librerie che incapsulano il tutto per il sistema da te usato (su windows la conio.h può aiutare anche se non l'ho mai utilizzata per questo compito preciso quindi non ti assicuro nulla) ma una simile funzionalità è possibile solo appoggiandosi alle api di sistema.
|
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Puoi usare cin.get, però considera che la funzione ritorna appena ha letto un carattere dallo stream d'input.
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Prova a leggere questo link, credo ci siano informazioni interessanti.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Il problema legato all'input tramite console è che la pressione di un tasto qualsiasi genera un evento di sistema. Tale evento viene processato, se previsto dall'applicazione del caso, ma qui si entra in una sfera della programmazione per nulla banale. Nel tuo caso particolare bisogna vedere come l'applicazione "prompt dei comandi" processa i vari segnali derivanti dalla pressione dei tasti. Sinceramente però le applicazioni che ho realizzato nel tempo, e che richiedevano un intervento dall'utente, sono state per la maggior parte basate su interfaccia grafica dove il concetto di programmazione ad eventi è alla base di tutto e dove simili problemi sono gestiti in maniera ben più efficace dai vari framework. Pertanto sono entrato ben poco nel dettaglio dell'input tramite console di comando. Ti ripeto però che l'intercettare eventi di sistema è una questione per nulla banale e che appunto richiede una certa pratica nel sistema operativo e nelle relative api. Forse nel link che ti ho passato potresti trovare qualcosa di interessante. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Il problema è che la console non rileva la pressione, per esempio, del tasto esc. Nel senso che non ti restituisce nulla a schermo e pertanto il buffer non si riempie.
Banalmente facendo un: Codice:
#include <iostream>
using namespace std;
int main()
{
char carattere;
cin >> carattere;
while (true) {
if (carattere == 27) {
cout << "Premuto esc!!";
}
}
}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
In maniera portabile, senza dover prendere return, no.
Sotto windows puoi usare conio, la funzione _getch. Sotto linux puoi fare così Codice:
int getch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
Ultima modifica di pabloski : 04-08-2012 alle 14:28. |
|
|
|
|
|
#9 | |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
Quote:
cout<<"Dove vuoi andare?" cin>>tasto; if(tasto== tasto INVIO){ cout<<"Ok stai fermo"} if(tasto==TASTO FRECCIA DESTRA){ cout<<"Vai a destra"; } if(tasto== TASTO FRECCIA SINISTERA){ cout<<""vai a sinistra";} ecc. anche con i tasti canc ed esc... scusate ancora se mi sto spiegando male ![]() ah scusate non avevo ricaricato la pagina e quindi non ho letto comunque io lavoro su windows e non saprei come fare con conio,ora do un occhiata al link Ultima modifica di neski : 04-08-2012 alle 14:30. |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Se è sotto windows è banale. Guarda qua http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
Semplicemente includi conio.h e usi la funzione _getch. Le uniche cose da tener presente sono: 1. non puoi leggere il carattere CTRL+C ( perchè viene usato per stoppare i programmi cli ) 2. i tasti funzione restituiscono 0 alla prima lettura e bisogna leggere una seconda volta per ottenere il codice del tasto |
|
|
|
|
|
#11 | |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
|
|
|
|
|
#13 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
|
|
|
|
|
#17 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 29
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Ovviamente l'esempio è per dare un'idea. Un esempio che riconosce i tasti direzionali è questo
Codice:
switch (_getch())
{
case 0:
case 224:
switch (_getch())
{
case 72: /* su */ break;
case 75: /* sinistra */ break;
case 77: /* destra */ break;
case 80: /* giù */ break;
}
break;
}
Ultima modifica di pabloski : 04-08-2012 alle 22:57. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:26.





















