c,c++ - intercettare i caratteri dalla tastiera
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.
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.
- ccts2002
- Linux 1.x
- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
c,c++ - intercettare i caratteri dalla tastiera
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
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
- JohnnyMnemonic
- Staff
- Messaggi: 2733
- Iscritto il: dom 5 set 2004, 0:00
- Nome Cognome: Giuseppe Palmiotto
- Slackware: 14.0
- Kernel: 3.5.5-thanatos
- Località: Bologna
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
Puoi avere le prime indicazioni dalla pagine di man, prova con o
Opportunamente combinati con un while puoi fare tutto quello che ti serve
Codice: Seleziona tutto
man getc
Codice: Seleziona tutto
man getch
- Blizzard
- Master
- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
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
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
- gallows
- Staff
- Messaggi: 3470
- Iscritto il: lun 20 set 2004, 0:00
- Slackware: 64-current
- Kernel: 5.10.7
- Località: ~/
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
Non c'è bisogno di scomodare le ncurses.
Ecco come puoi fare:
Dai un'occhiata a `man termios.h'
Per leggere "un carattere alla volta" è un po' più laborioso senza ncurses, ma si può fare.
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;
}
Per leggere "un carattere alla volta" è un po' più laborioso senza ncurses, ma si può fare.
- nuitari
- Linux 3.x
- Messaggi: 777
- Iscritto il: dom 14 ott 2007, 12:51
- Slackware: 12.0
- Località: San Colombano al Lambro
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
Ma per quanto riguarda lo sviluppo dei videogames, le SDL non avevano qualcosa di apposito?
- Blizzard
- Master
- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
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
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
- nuitari
- Linux 3.x
- Messaggi: 777
- Iscritto il: dom 14 ott 2007, 12:51
- Slackware: 12.0
- Località: San Colombano al Lambro
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
Vai di SDL, promuoviamolo. Tutti ad impazzire dietro a ste DirectX..
- Blizzard
- Master
- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
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 )
e chiamo il testimone a deporre:
"Fate entrare John Carmack!"
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 forse è la volta buona!
ciao
Gio
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 )
e chiamo il testimone a deporre:
"Fate entrare John Carmack!"
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 forse è la volta buona!
ciao
Gio
- ccts2002
- Linux 1.x
- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
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:
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!!
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;
...
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!!
- gallows
- Staff
- Messaggi: 3470
- Iscritto il: lun 20 set 2004, 0:00
- Slackware: 64-current
- Kernel: 5.10.7
- Località: ~/
- Contatta:
Re: c,c++ - intercettare i caratteri dalla tastiera
Se devi fare una shell allora sì, usa le ncurses. Non a caso tutte le shell sono linkate ad essa.
- Calzo
- Linux 1.x
- Messaggi: 112
- Iscritto il: sab 6 ott 2007, 22:21
- Slackware: 10.2 | 13
- Desktop: Fluxbox | KDE
- Località: MN
Re: c,c++ - intercettare i caratteri dalla tastiera
Si. Notavo infatti questo pdf e in generale tutto il documento presente in http://sisinflab.poliba.it/coppi/graphics/nuitari ha scritto:Ma per quanto riguarda lo sviluppo dei videogames, le SDL non avevano qualcosa di apposito?
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 ).