Pagina 1 di 1

c,c++ - intercettare i caratteri dalla tastiera

Inviato: dom 6 gen 2008, 16:48
da ccts2002
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

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

Inviato: dom 6 gen 2008, 16:50
da JohnnyMnemonic
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

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

Inviato: dom 6 gen 2008, 17:36
da Blizzard
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

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

Inviato: dom 6 gen 2008, 17:53
da gallows
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.

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

Inviato: dom 6 gen 2008, 18:44
da nuitari
Ma per quanto riguarda lo sviluppo dei videogames, le SDL non avevano qualcosa di apposito?

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

Inviato: dom 6 gen 2008, 20:01
da Blizzard
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

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

Inviato: dom 6 gen 2008, 20:28
da nuitari
Vai di SDL, promuoviamolo. Tutti ad impazzire dietro a ste DirectX..

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

Inviato: dom 6 gen 2008, 20:40
da Blizzard
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

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

Inviato: lun 7 gen 2008, 21:09
da ccts2002
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

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

Inviato: lun 7 gen 2008, 22:40
da gallows
Se devi fare una shell allora sì, usa le ncurses. Non a caso tutte le shell sono linkate ad essa.

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

Inviato: lun 14 gen 2008, 23:14
da Calzo
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 :| ).