Newsgroup: it.comp.lang.c++
Titolo: pressione di un tasto

Esiste qualcosa nella libreria standard del c++ per rilevare la 
pressione di un tasto della tastiera? O in alternativa come potrei fare 
per scriverne una?
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 per scriverne una?
Dimenticavo.. uso g++ su linux. Comunque mi sembra proprio che non ci 
sia niente di standard, dato che il c++ ansi e' indipendente da hardware 
e so.


 fare per scriverne una?
Ciao, Re degli Dèi,
Immagino che tu lo sappia meglio di me che esistono le varie "getch" e
"getche" eccetera. Come mai non le puoi usare? Te lo chiedo perché io
continuo a fare ampio ricorso alla libreria standard del C (ammetto...)
e fin qui tutto ha funzionato liscio.
ciao!
Apx.


La libreria standard del C non contiene ne getch() ne getche().
Ciao,
Nicola

per scriverne una?
funzione kbhit() in conio.h?
-- 
You know you're in trouble 
when there is nothing left on the altimeter 
but the maker's name

 
Non è standard e non esiste sotto linux!

 
E comunque anche con queste funzione l'esecuzione si interrompe. Mi 
spiego meglio: non voglio evitare la pressione di invio dopo 
l'inserimento del carattere, ma voglio creare qualcosa di equivalente a 
kbhit.


 
questo č assolutamente dipendente dalla piattaforma, quindi devi 
chiedere nel NG appropriato, it.comp.programmare.win32 per la 
piattaforma Windows, it.comp.os.linux.development per Linux.
-- 
Il piů č farcela di testa.

 per scriverne una?
Dato che il C++ standard non conosce il concetto di "tastiera" ma solo di
"input stream", temo proprio che non ci sia nulla di standard.
Sconfinando nell'OT per questo newsgroup, potrei postare la mia soluzione
personale, sviluppata per un ambiente Linux rimaneggiando un po' di cose
trovate online, che penso dovrebbe essere abbastanza standard per tutto il
mondo UNIX.
Esistono altre mille soluzioni diverse (prova a guardare ad esempio
all'interno delle librerie ncurses) ma questa mi sembra la piu' leggera.
Spero faccia al caso tuo.
Ciao!
--- kbd_utils.h -----------------------------------------------------------
#ifndef KBD_UTILS_H
#define KBD_UTILS_H
#ifdef __cplusplus
extern "C" {
#endif
/* switch to immediate kbd mode: the input can be read char by char.
    return 0 on error (not a terminal input), 1 on success. */
int set_immediate_input_mode();
/* reset default input mode: chars are read only when enter is pressed
   return 0 on error, 1 on success. */
int reset_default_input_mode();
/* get a character from the input buffer, return 0 immediately when empty.
*/
int getch();
#ifdef __cplusplus
}
#endif
#endif
--- kbd_utils.c -----------------------------------------------------------
#include "kbd_utils.h"
#include <unistd.h>
#include <termios.h>
struct termios saved_attributes;
int getch()
  {
  char c = 0;
  read( STDIN_FILENO, &c, 1 );
  return c;
  }
int set_immediate_input_mode()
  {
  struct termios tattr;
  if (!isatty(STDIN_FILENO))
    return 0;
  tcgetattr(STDIN_FILENO, &saved_attributes );
  tcgetattr(STDIN_FILENO, &tattr );
  tattr.c_iflag &= ~(ISTRIP);
  tattr.c_lflag &= ~(ICANON|ECHO);
  tattr.c_oflag &= ~(OCRNL|ONOCR|ONLRET);
  tattr.c_cc[VMIN]=0;
  tattr.c_cc[VTIME]=0;
  tcsetattr(STDIN_FILENO, TCSANOW, &tattr );
  return 1;
  }
int reset_default_input_mode()
  {
  tcsetattr(STDIN_FILENO, TCSANOW, &saved_attributes );
  return 1;
  }

Non è standard e non esiste sotto linux!
OK, come non detto. :)


> La libreria standard del C non contiene ne getch() ne getche().
Pazzesco! Non lo avrei mai creduto, e non si finisce mai di imparare...
ciao!
Apx.

 kbhit.
Google is your friend :-)
prova questo...
http://www.ozzu.com/ftopic34401.html
ciao TD