doom
Newbie
Karma: +0/-0
Scollegato
Messaggi: 31
|
 |
« inserita:: Luglio 01, 2005, 12:38:11 am » |
|
Ho iniziato da poco a programmare in ambiente Denian-linux in c, mi sono subito imbattuto in una differenza con il compilatore Borland c, con quest'ultimo era possibile attraverso la libreria conio.h avere a disposizione una funzione getch() che attenda che sia digitato un carattere a tastiera e nell'evento in cui questo venga premuto, assegna il valore di questo tasto direttamente senza premere invio ad una variabile char. Esempio: c=getch(); Questa istruzione assegnera il primo singolo carattere che verràpremuto sulla tastiera alla variabile c. Consultando comunque molte fonti ho visto che esiste una funzione getchar(), che corrisponde in funzionalitàa getch() citatata sopra, ma non totalmente, perche questa dopo aver digitato il primo aspetta che voi premiate invio. Esiste un modo alternativo o una funzione simile a getch() del Borland con il compilatore gcc?
|
|
|
|
|
Registrato
|
|
|
|
|
keltik
|
 |
« Risposta #1 inserita:: Luglio 01, 2005, 12:56:42 am » |
|
sono l' essere vivente su questo pianeta più distante dalla programmazione ma ... $ man getch si parla di ncurses, ma forse può fare al caso tuo o darti qualche dritta.
|
|
|
|
|
Registrato
|
|
|
|
doom
Newbie
Karma: +0/-0
Scollegato
Messaggi: 31
|
 |
« Risposta #2 inserita:: Luglio 01, 2005, 11:02:17 am » |
|
Mi dice che non c'è il manuale getch
|
|
|
|
|
Registrato
|
|
|
|
|
|
|
Ldonesty
|
 |
« Risposta #4 inserita:: Luglio 01, 2005, 11:57:44 am » |
|
doom ha scritto: Mi dice che non c'è il manuale getch
Probabilmente devi installare manpages-dev.
|
|
|
|
|
Registrato
|
Il reggiseno e' uno strumento democratico perche' separa la destra dalla sinistra, solleva le masse e attira i popoli.
|
|
|
doom
Newbie
Karma: +0/-0
Scollegato
Messaggi: 31
|
 |
« Risposta #5 inserita:: Luglio 01, 2005, 10:15:29 pm » |
|
Ho provato ad installare manpages-dev, ma niente da fare il manuale getch non c'è.
|
|
|
|
|
Registrato
|
|
|
|
|
Ldonesty
|
 |
« Risposta #6 inserita:: Luglio 02, 2005, 12:53:35 am » |
|
doom ha scritto: Ho provato ad installare manpages-dev, ma niente da fare il manuale getch non c'è.
Ho controllato meglio sul sito debian (confrontando anche con l'output iniziale del man di getch) e se non ho sbagliato alla grande, probabilmente appartiene a libncurses5-dev. Prova ad installare questo pacchetto e a vedere se risolvi.
|
|
|
|
|
Registrato
|
Il reggiseno e' uno strumento democratico perche' separa la destra dalla sinistra, solleva le masse e attira i popoli.
|
|
|
|
le0n
|
 |
« Risposta #7 inserita:: Luglio 02, 2005, 03:35:02 pm » |
|
nella libreria conio.h è presente anche getche, getchar, getc... sotto linux puoi rimediare con una scanf("%c", &variabile); :-D ... l'effetto è lo stesso ;-)
Hasta!
|
|
|
|
|
Registrato
|
|
|
|
doom
Newbie
Karma: +0/-0
Scollegato
Messaggi: 31
|
 |
« Risposta #8 inserita:: Luglio 02, 2005, 11:02:46 pm » |
|
Il problema che risolvo con scanf("%c",&var) lo risolvo anche che con la getchar() che è una funzione della libreria stdio.h. Ma queste due funzioni appena citate prima di assegnare il valore aspettano che io prema invio, cioè digito un carattere e poi perchè questo venga assegnato alla variabile devo premere anche invio, invece con la getch() della della conio.c non bisogna premere invio, perchè appena viene premuto il tasto viene subito assegnato. Comunque grazie ai link citati da keltik sono riuscito a capire che ho bisogno della libreria ncuses che se provo ad installare con apt-get install ncurses, mi dice:
Il pacchetto ncurses non è disponibile, ma è citato da un altro pacchetto. Questo può significare che il pacchetto manca, è diventato obsoleto o è disponibile solo da un'altra sorgente E: Il pacchetto ncurses non ha candidati da installare
Qualcuno sa dove trovarla o come installarla?
|
|
|
|
|
Registrato
|
|
|
|
|
Ldonesty
|
 |
« Risposta #9 inserita:: Luglio 02, 2005, 11:17:53 pm » |
|
Ti dovrebbero bastare: ncurses-base, ncurses-bin, ncurses-term. :ciauz:
|
|
|
|
|
Registrato
|
Il reggiseno e' uno strumento democratico perche' separa la destra dalla sinistra, solleva le masse e attira i popoli.
|
|
|
|
The_Noise
|
 |
« Risposta #10 inserita:: Luglio 04, 2005, 01:11:44 pm » |
|
Ehm... penso che le librerie di sviluppo siano nel pacchetti libncurses-dev (che tra l'altro è il pacchetto che contiene il man). Per poter leggere un carattere senza premere invio devi cambiare le opzioni del terminale. Questa è una spiegazione di perchè funziona così (e del fatto che la funzione del borland non è assolutamente standard): http://lists.suse.com/archive/suse-programming-e/2004-Feb/0019.htmlQui invece trovi un esempio di condice multipiattaforma che implementa l'imput a singolo carattere senza invio: http://forums.devarticles.com/archive/t-8613/Maze-game-input-char-without-pressing-enterTrovi di tutto e di più nei man o al limite su google. :ciauz: PS Se raggiungi l'obiettivo, saremmo contenti di leggere un esempietto in c :-D
|
|
|
|
|
Registrato
|
|
|
|
doom
Newbie
Karma: +0/-0
Scollegato
Messaggi: 31
|
 |
« Risposta #11 inserita:: Luglio 04, 2005, 11:54:34 pm » |
|
Ok, l'ho installata, ma quando vado a a compilare un file c del tipo:
#include #include
int main(void){ char c; c=getch(); printf("%c\n",c); }
Il compilatore mi dice che non riesce a trovare la libreria ncurses.h che a sua volta contiene la funzione getch();
Come faccio ad includerla?
|
|
|
|
|
Registrato
|
|
|
|
doom
Newbie
Karma: +0/-0
Scollegato
Messaggi: 31
|
 |
« Risposta #12 inserita:: Luglio 14, 2005, 01:28:43 am » |
|
Ragazzi grazie mille e soprattutto ai link che mi ha fornito keltik che sono stati molto utili.
|
|
|
|
|
Registrato
|
|
|
|
|