Repository 32bit  Forum
Repository 64bit  Wiki

c,c++ - intercettare i caratteri dalla tastiera

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

c,c++ - intercettare i caratteri dalla tastiera

Messaggioda ccts2002 » dom gen 06, 2008 16:48

inaguro, per quanto mi riguarda, questa sezione....
domandona c o c++...
come si fa, o cosa dovrei leggere, per poter creare un programma che legga i caratteri da tastiera, ma non li scriva sul monitor? per capirci, un qualcosa tipo quando digitiamo la password da shell, che la password viene letta, ma non scritta sul terminale...
e anche...come si fa a leggere i caratteri man mano che vengono scritti e non solo dopo aver digitato invio? in windows mi pare ci sia il comando getch...della libreria conio.h...in linux?
grazie mille!!!

ciaooo
Avatar utente
ccts2002
Linux 2.0
Linux 2.0
 
Messaggi: 155
Iscritto il: gio nov 09, 2006 23:20
Località: milano - trieste - catania

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda JohnnyMnemonic » dom gen 06, 2008 16:50

Puoi avere le prime indicazioni dalla pagine di man, prova con
Codice: Seleziona tutto
man getc
o
Codice: Seleziona tutto
man getch

Opportunamente combinati con un while puoi fare tutto quello che ti serve
Avatar utente
JohnnyMnemonic
Staff
Staff
 
Messaggi: 2732
Iscritto il: sab set 04, 2004 23:00
Località: Bologna
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda Blizzard » dom gen 06, 2008 17:36

grossa come cosa!

la getch mi sta comodissima nello sviluppo di un gioco!!!!!!!
Prima quando ero su Winpoz utilizzavo la GetAsyncKeyState per fetchare le informazioni dei tasti premuti... e da li mi creavo la classe di gestione dell'input ecc! ma su linux tu pensa che non avevo trovato ancora una funzione sostitutiva e in alcuni forum si sfociava addirittura nell'assembly :P

ciao
Gio
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda gallows » dom gen 06, 2008 17:53

Non c'è bisogno di scomodare le ncurses.
Ecco come puoi fare:

Codice: Seleziona tutto
#include <termios.h>

char* f(void)
{
    struct termios tty;
    tcflag_t old;
    /* etc... */

    tcgetattr(STDIN_FILENO, &tty);
    old = tty.c_lflag;
    tty.c_lflag &= ~ECHO;
    tcsetattr(STDIN_FILENO, TCSANOW, &tty);                                                 

/* ... prendi la stringa dallo stdin ...*/

    tty.c_lflag = old;
    tcsetattr(STDIN_FILENO, TCSANOW, &tty);

   return s;
}

Dai un'occhiata a `man termios.h'

Per leggere "un carattere alla volta" è un po' più laborioso senza ncurses, ma si può fare.
Avatar utente
gallows
Staff
Staff
 
Messaggi: 3466
Iscritto il: dom set 19, 2004 23:00
Località: Palermo
Kernel: FreeBSD 8.0-RELEASE-p3
Desktop: ratpoison

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda nuitari » dom gen 06, 2008 18:44

Ma per quanto riguarda lo sviluppo dei videogames, le SDL non avevano qualcosa di apposito?
Avatar utente
nuitari
Linux 2.6
Linux 2.6
 
Messaggi: 777
Iscritto il: dom ott 14, 2007 11:51
Località: San Colombano al Lambro
Slackware: 12.0

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda Blizzard » dom gen 06, 2008 20:01

si! infatti avevo visto che le sdl avevano funzioni simili... tuttavia lavorando con irrlicht di base non avevo bisogno di SDL, quindi avrei dovuto utilizzarle solo per quello scopo e il gestore di input di irr non mi piaceva molto.
Penso che ncurses sia comunque più diffusa e rapidamente utilizzabile delle SDL... altrimenti avrei utilizzato quelle.
Sto pensando in questi giorni di realizzare uno di quei picchiaduro a scorrimento orizzontale... (è solo una bozza di idea... ma va sempre più concretizzandosi)... quindi volevo creare di base codice portabile... ora irrlicht è perfettamente portabile... e SDL se non sbaglio pure.
Anche se adesso vorrei valutare anche l'alternativa ncurses per quanto riguarda la versione linux.
In questo caso rimanderei a delle define il compito di compilare con le funzioni ncurses o con le funzioni di windows.h
Devo decidere bene il da farsi

ciao
Gio
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda nuitari » dom gen 06, 2008 20:28

Vai di SDL, promuoviamolo. Tutti ad impazzire dietro a ste DirectX..
Avatar utente
nuitari
Linux 2.6
Linux 2.6
 
Messaggi: 777
Iscritto il: dom ott 14, 2007 11:51
Località: San Colombano al Lambro
Slackware: 12.0

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda Blizzard » dom gen 06, 2008 20:40

ciao...
forse hai ragione! Comunque per quello che mi riguarda... anche se ho sempre ritenuto le DX un buon prodotto uscito da quella bettola ho sempre sostenuto la superiorità delle OpenGL (sono anche più divertenti da usare :badgrin: )
e chiamo il testimone a deporre:
"Fate entrare John Carmack!" :badgrin: :badgrin: :badgrin:

Comunque a parte gli scherzi ho sempre pensato di documentarmi un po più seriamente sulle SDL... anche perchè oltre a fornire un ottimo binding tra il window handler e il device context delle OGL contiene anche un ottimo sistema di renderig... e dato che per il prossimo gioco si parla di 2D :-k forse è la volta buona!

ciao
Gio
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda ccts2002 » lun gen 07, 2008 21:09

ciao,
vi spiego meglio quello che mi interessa...forse dovevo farlo prima...
ho un programmino in c++, e come interfaccia da riga di comando un serie di domande del tipo:
Codice: Seleziona tutto
se vuoi A premi 1;
se vuoi B premi 2;
...

volevo modificare un pò la cosa inserendo nel programma una piccola shell...del tipo gnuplot, octave, etc...in modo da rendere la cosa più "figa" (ma anche per vedere come si fa...) e magari inserire anche l'utilizzo del tab, in modo che con la pressione del tab si completi il comando.
creare una "shell" che interpreti il comando, non è difficile, basta una serie di if (la cosa più semplice, poi la si può migliorare...), il problema mi si è posto con il tab...riesco a fargli completare il comando, ma solo dopo aver premuto invio...in più resta a schermo il carattere di tabulazione e la fine del comando risulta su un'altra riga...
la soluzione è intercettare il tasto premuto, non stamparlo a video subito, analizzarlo e vedere se è un tab o qualcos'altro e casomai stamparlo...per questo chiedevo come si fa a non stampare il carattere a video e a leggere un carattere alla volta prima del newline...
non ho ancora avuto la possibilità di provare quello che mi avete suggerito, ma spero di farlo al più presto.
ogni aggiunta in più sarà ben accetta!!!

grazie mille!! :D :D :D :D
Avatar utente
ccts2002
Linux 2.0
Linux 2.0
 
Messaggi: 155
Iscritto il: gio nov 09, 2006 23:20
Località: milano - trieste - catania

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda gallows » lun gen 07, 2008 22:40

Se devi fare una shell allora sì, usa le ncurses. Non a caso tutte le shell sono linkate ad essa.
Avatar utente
gallows
Staff
Staff
 
Messaggi: 3466
Iscritto il: dom set 19, 2004 23:00
Località: Palermo
Kernel: FreeBSD 8.0-RELEASE-p3
Desktop: ratpoison

Re: c,c++ - intercettare i caratteri dalla tastiera

Messaggioda Calzo » lun gen 14, 2008 23:14

nuitari ha scritto:Ma per quanto riguarda lo sviluppo dei videogames, le SDL non avevano qualcosa di apposito?


Si. Notavo infatti questo pdf e in generale tutto il documento presente in http://sisinflab.poliba.it/coppi/graphics/

In engine2.pdf viene descritto proprio come rilevare l'evento (anche multiplo) di pressione di più tasti in modo non interruttivo. Cosa che è diversa dall'uso della sola funzione getch() o getchar() (che sono invece interruttive).

Ad ogni modo mi pareva che ci fosse un modo per rilevare la pressione dei tasti in modo non interruttivo senza scomodare le SDL... forse con curses.h, ma purtroppo non riesco ne a ricordare ne a trovare degli esempi che mi ero scritto :(

(...Comunque per fare quello che vuole ccts2002, forse questo non serve :| ).
Avatar utente
Calzo
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: sab ott 06, 2007 21:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

cron