Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Leggere i tasti da tastiera
Forum - C/C++ - Leggere i tasti da tastiera

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
kaig (Ex-Member)
Newbie


Messaggi: 19
Iscritto: 25/05/2009

Segnala al moderatore
Postato alle 19:42
Lunedì, 08/06/2009
Ciao, avevo l'intenzione di leggere dei caratteri dallo stram di input senza necessariamente attendere la pressione del tasto INVIO, ma a quanto pare non è possibile (ditemi se sbaglio!!). In alternativa ho pensato che leggendo direttamente i tasti (e facendo ritornare il relativo codice (che mi sembra ci sia)) da tastiera avrei potuto gestire meglio la cosa. Ora però non so come leggere tali tasti e come associarli ai loro codici. Ho trovato in giro un acerta funzione "_getch()" ma mi sembra che funzioni con visual c++ (ditemi di nuovo se sbaglio)...
Se conoscete qualche funzione utile al caso siete i benvenuti. grazie ;);)

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:28
Lunedì, 08/06/2009
A cosa ti serve? Se ci chiarisci il contesto in cui vuoi usare tale funzionalità, forse si capisce meglio ...


PM Quote
Avatar
kaig (Ex-Member)
Newbie


Messaggi: 19
Iscritto: 25/05/2009

Segnala al moderatore
Postato alle 8:15
Martedì, 09/06/2009
Il tutto non ha interfaccia grafica, è un' applicazione console dove devo ricevere dei caratteri da tastiera seguiti da da inserimenti di stringa. il fatto è che qundo l'utente digita un carattere predefinito il programma deve accettarlo e passare subito al successivo inserimento di stringa, senza chiedere la pressione del tasto INVIO.
Così facendo diventerebbe tutto piu' fluido e l'utente non dovrebbe preoccuparsi di digitare 3000 INVII. Spero di essere stato chiaro.. ciao

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:17
Martedì, 09/06/2009
Testo quotato

Postato originariamente da kaig:

Ciao, avevo l'intenzione di leggere dei caratteri dallo stram di input senza necessariamente attendere la pressione del tasto INVIO, ma a quanto pare non è possibile (ditemi se sbaglio!!). In alternativa ho pensato che leggendo direttamente i tasti (e facendo ritornare il relativo codice (che mi sembra ci sia)) da tastiera avrei potuto gestire meglio la cosa. Ora però non so come leggere tali tasti e come associarli ai loro codici. Ho trovato in giro un acerta funzione "_getch()" ma mi sembra che funzioni con visual c++ (ditemi di nuovo se sbaglio)...
Se conoscete qualche funzione utile al caso siete i benvenuti. grazie ;);)



a suo tempo usavo la getch() ( senza underscore ) che funzionava tranquillamente in turbo C++ ( eh si, i vecchi tempi del DOS ).
Riguardo alla codifica, usava semplicemente la codifica ASCII, per alcuni tasti ( per esempio le frecce ) usava una codifica con due caratteri ( prima #0 e poi un'altro ), comunque puoi fare un semplice programmino per farti restituire i codici dei vari tasti.
Spero di esserti stato di aiuto.

Ciao. :k:

Luigi

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 10:27
Martedì, 09/06/2009
Testo quotato

Postato originariamente da kaig:

Così facendo diventerebbe tutto piu' fluido e l'utente non dovrebbe preoccuparsi di digitare 3000 INVII.



E se l'utente sbaglia?

E quando ritieni concluso l'input se manca l'invio?

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:37
Martedì, 09/06/2009
Testo quotato

Postato originariamente da theprogrammer:

Testo quotato

Postato originariamente da kaig:

Così facendo diventerebbe tutto piu' fluido e l'utente non dovrebbe preoccuparsi di digitare 3000 INVII.



E se l'utente sbaglia?



dovresti fare qualcosa del genere

Codice sorgente - presumibilmente C/C++

  1. [...]
  2. int I = 0;
  3. while (I = 0) {
  4.   C = getch();
  5.   switch (C) {
  6.     // Qui' metti le reazioni per tasti corretti settando I = 1;
  7.    default:
  8.     // Qui' metti la reazione per tasti non corretti
  9.  
  10.   }
  11. }
  12. [...]



Testo quotato



E quando ritieni concluso l'input se manca l'invio?




puoi modificare il while di sopra cosi'

Codice sorgente - presumibilmente C/C++

  1. int I = 0;
  2. char C = 0;
  3. while ((I = 0)&&(C != 13)) { // Se non ricordo male 13 e' il codice per INVIO


Ultima modifica effettuata da gigisoft il 09/06/2009 alle 10:39
PM Quote
Avatar
kaig (Ex-Member)
Newbie


Messaggi: 19
Iscritto: 25/05/2009

Segnala al moderatore
Postato alle 10:42
Martedì, 09/06/2009
Testo quotato

Postato originariamente da theprogrammer:

E se l'utente sbaglia?

E quando ritieni concluso l'input se manca l'invio?



Il controllo sull'input verrebbe comunque dopo l'acquisizione del carattere, e in caso di errore verrebbe restituito un messaggio di errore.
Per la conclusione dell'input..io devo leggere uno e un solo carattere (il tasto premuto) e l'input deve finire li. Quello che viene digitato poi fa parte della stringa successiva.

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:57
Martedì, 09/06/2009
Testo quotato

Postato originariamente da kaig:

Testo quotato

Postato originariamente da theprogrammer:

E se l'utente sbaglia?

E quando ritieni concluso l'input se manca l'invio?



Il controllo sull'input verrebbe comunque dopo l'acquisizione del carattere, e in caso di errore verrebbe restituito un messaggio di errore.
Per la conclusione dell'input..io devo leggere uno e un solo carattere (il tasto premuto) e l'input deve finire li. Quello che viene digitato poi fa parte della stringa successiva.



Il controllo dell'input DEVE avvenire dopo l'acquisizione del carattere, la getch() legge uno e un solo carattere, per la reazione decidi TU cosa il programma deve fare in base al tasto premuto, io mi sono limitato a fare un esempio di come usarla.

Ciao. :k:

Luigi

PM Quote
Avatar
kaig (Ex-Member)
Newbie


Messaggi: 19
Iscritto: 25/05/2009

Segnala al moderatore
Postato alle 11:24
Martedì, 09/06/2009
la funzione getch() ho visto che puo' essere utilizzata sotto windows includendo la libreria conio.h, io, dato principalmente uso linux (scusate se non l'ho specificato prima..) non potrei utilizzarla. Pensavo che ci fosse una funzione appartenete ad una libreria standard, ma tanté..
Ora provo a vedere se riesco a portare la conio.h su linux :rofl:
ciao

ps: una curiosità..come mai (su win) se scrivo getch(), getche(), o _getch() funziona uguale? è un po' strano,... grazie;);)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo