Sapete se esiste una funzione per la lettura dell'input non bloccante?
Sapete se esiste una funzione per la lettura dell'input non bloccante?
cioè mentre tu scrivi manda direttamente in output il testo?
![]()
![]()
![]()
Chi di noi non vorrebbe
sollevare il velo sotto cui sta nascosto il
futuro...
David Hilbert
[ per DOS /WIN non standard vedi di includere conio.c al posto di conio.h se non funziona]
#include <stdio.h>
#include <conio.h>
int main (void) {
while (0x01) {
if (! (getch ()))
if (getch () == 0x3f)
printf("Hai premuto il tasto F5.");
}
return (0x0);
}
[PER DOS TC usando ASM ]
char readkey(){
char ris;
asm{
move ah,0x00
int 0x16
mov [ris],al
}
return ris;
}
[sotto linux]
utilizza la term2_0.h
http://forum.html.it/forum/showthrea...hreadid=655927
Non in C standard che io sappia, occorre usare le funzioni native dell'OS. Su piattaforme POSIX, dovresti cavartela con fcntl e O_NONBLOCK (se ben ricordo)Originariamente inviato da Jack.cpp
Sapete se esiste una funzione per la lettura dell'input non bloccante?
"Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".
la libreria che ho linkato alla fine utilizza lo standard POSIXOriginariamente inviato da Ikitt
Non in C standard che io sappia, occorre usare le funzioni native dell'OS. Su piattaforme POSIX, dovresti cavartela con fcntl e O_NONBLOCK (se ben ricordo)![]()
(almeno credo, ormai sono passati 2 anni da quando l'ho scritta)
se non premi nulla la printf non verrà mai eseguita, ergo: l'input è bloccatoOriginariamente inviato da kentaromiura
[ per DOS /WIN non standard vedi di includere conio.c al posto di conio.h se non funziona]
codice:#include <stdio.h> #include <conio.h> int main (void) { while (0x01) { if (! (getch ())) if (getch () == 0x3f) printf("Hai premuto il tasto F5."); printf("Input non bloccato!\n"); } return (0x0); }
Ma forse ho capito male io...
con le API (GetKeyState) risolvi in ogni caso
(prova a premere anche contemporaneamente freccette+barra):
codice:#include <stdio.h> #include <windows.h> int main() { while(1) { if (GetKeyState (VK_LEFT) < 0) printf("LEFT\n") ; if (GetKeyState (VK_RIGHT) < 0) printf("RIGHT\n"); if (GetKeyState (VK_DOWN) < 0) printf("DOWN\n"); if (GetKeyState (VK_UP) < 0) printf("UP\n"); if (GetKeyState (VK_SPACE) < 0) printf("SPACE\n"); if (GetKeyState (VK_ESCAPE) < 0) break; Sleep(100); printf("Input non bloccato\n"); } return 0; }
...Terrible warlords, good warlords, and an english song
no, l'output e' bloccatoOriginariamente inviato da Johnny_Depp
se non premi nulla la printf non verrà mai eseguita, ergo: l'input è bloccato
Ma forse ho capito male io...![]()
l'input no..
metti che vuoi fare un gioco, gestisci tutto in un ciclo![]()
mica premi sempre i tasti, ma quando li premi l'omino si muove ?
no?![]()
comunque ho cercato di dare diverse soluzioni,
mancava giusto la versione API Windows![]()
:master:
Sì, Sì...Originariamente inviato da kentaromiura
metti che vuoi fare un gioco, gestisci tutto in un ciclo![]()
mica premi sempre i tasti, ma quando li premi l'omino si muove ?
no?![]()
e se non premi alcun tasto il resto del ciclo resta bloccato! (se non muovi l'omino le navicelle nemiche non si muovono)
p.s. il tuo codice è utile per catturare il "doppio" output restituito dai tasti speciali... F1, F2, F3, etc
...Terrible warlords, good warlords, and an english song
'azzOriginariamente inviato da Johnny_Depp
Sì, Sì...
e se non premi alcun tasto il resto del ciclo resta bloccato! (se non muovi l'omino le navicelle nemiche non si muovono)
p.s. il tuo codice è utile per catturare il "doppio" output restituito dai tasti speciali... F1, F2, F3, etc![]()
ora ho visto..
invece della prima if(!getch())
bisogna usare kbhit()![]()
che ritorna 0 se non e' stato premuto nulla![]()
while(!kbhit()) //finche non viene premuto nulla
scusadormo troppo poco ultimamente..
..
comunque sconsiglio vivamente la conio, meglio utilizzare le API o LA libreria POSIX ..
l'altra funzione assembly l'ho inclusa solo per conoscenza.![]()