View Full Version : [C ANSI] input da tastiera che non blocchi l'esecuzione del codice
Ciao!
come da titolo.. cerco un modo per verificare se c'è un tasto premuto e, se si ,leggerlo per poi utilizzarlo nel programma
(quando si preme il tasto non deve apparire sullo schermo)
è possibile? :D
grazie!
bottomap
03-12-2009, 14:14
Ciao,
Non credo faccia parte dello standard ANSI, ma sicuramente in ogni compilatore che può usare conio.h hai a disposizione la funzione kbhit() (una _kbhit(), conforme ISO C++, esiste in MSVC) che ritorna true o false a seconda del numero di caratteri contenuti nel buffer di input.
Ciaociao :)
ho usato kbhit() però cercavo qualcosa di ansi...:cry:
wingman87
03-12-2009, 17:47
Credo che non esista una funzione standard che faccia quello che chiedi. Qui puoi trovare l'intera libreria standard: LINK (http://www.cplusplus.com/reference/clibrary/)
è possibile? :D
Non è possibile.
Il metodo da usare dipende tutto da sistema operativo e compilatore.
(una _kbhit(), conforme ISO C++, esiste in MSVC)
Non è conforme ISO ;) Tra l'altro è in conio.h del platform sdk, quindi niente di meno conforme allo standard visto che questo header non esistere nello standard.
maulattu
03-12-2009, 19:32
Non è possibile.
Il metodo da usare dipende tutto da sistema operativo e compilatore.
Non è conforme ISO ;) Tra l'altro è in conio.h del platform sdk, quindi niente di meno conforme allo standard visto che questo header non esistere nello standard.
non si può fare uso della select che osserva l'unico file descriptor "stdin"? :confused:
bottomap
03-12-2009, 19:55
Non è conforme ISO ;) Tra l'altro è in conio.h del platform sdk, quindi niente di meno conforme allo standard visto che questo header non esiste nello standard.
Mi rifacevo semplicemente a quanto menzionato in msdn riguardo alla funzione kbhit (http://msdn.microsoft.com/en-us/library/ms235390%28VS.80%29.aspx).
Si può leggere in testa alla descrizione la frase:
Use the ISO C++ conformant _kbhit instead
Onestamente non saprei cosa indichi in merito l'ISO C++ (non C - onestamente non sapevo neppure esistesse uno standard ISO C++ separato)... ho riportato solo quanto descritto. Chiedo scusa se ho dato un'indicazione errata :) in tal caso andrebbero tirate le orecchie pure a mamma MS.
Sarebbe tra l'altro la prima volta che trovo qualcosa di esplicitamente sbagliato su msdn (l'undocumented è un discorso a parte).
Ciaociao :)
Come vedi nemmeno _kbhit è standard (nemmeno C++), altrimenti ce lo scrivevano ;)
http://msdn.microsoft.com/en-us/library/58w7c94c(VS.80).aspx
Anche _kbhit risiede in conio.h, tutto quello che c'è in conio.h non è standard.
Probabilmente per "conforme" allo standard ISO C++ si intende che il nome della funzione è conforme allo standard ISO C++ perché è presente l'underscore. Ipotizzando, è possibile che preveda l'underscore per le funzioni che vengono aggiunte alla libreria standard per evitare che si confonda con le altre funzioni.
bottomap
03-12-2009, 20:55
Ciao,
Si, evidentemente si indica ISO C++ conformant per l'underscore davanti al nome e non per altro.
Non mi pare però che in altre funzioni che fanno parte dello standard sia specificato come dici ("altrimenti ce lo scrivevano").
E'vero invece che ogni funzione POSIX per cui esiste la corrispondente _funzione è descritta la stessa frase (This POSIX function is deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _<funzione> instead.).
Ciaociao :)
ho usato kbhit() però cercavo qualcosa di ansi...:cry:
Se ti serve una soluzione che rispetti "lo standard ANSI" ricorda che ci sono du standard, C89 e C99. Ad ogni modo la maggior parte dei compilatori (GCC incluso) non supportano tutte le caratteristiche previste dal nuovo standard.
Non mi pare però che in altre funzioni che fanno parte dello standard sia specificato come dici ("altrimenti ce lo scrivevano").
L'hanno tolto, una volta c'era su ogni funzione uno specchietto in cui c'era scritto se era ANSI e/o POSIX.
bottomap
03-12-2009, 21:20
Evidentemente si... nell'msdn fornita su cd con il mcvs .net 2003 non c'è traccia della cosa (anzi direttamente kbhit rimanda su _kbhit senza avere una sua paginetta di interludio).
Sono curioso di vedere se riesco a recuperare il vecchio msdn fornito con il vs5 che usavo al lavoro. Ma mi pare che fino al vs6 non esistesse proprio la forma _<funzione> per la maggior parte delle funzioni che sarebbero diventate deprecate (comprese quelle del conio). Forse comunque menzionavano se fossero o meno di derivazione POSIX.
||ElChE||88
04-12-2009, 00:31
Ad ogni modo la maggior parte dei compilatori (GCC incluso) non supportano tutte le caratteristiche previste dal nuovo standard.
Nuovo? :asd:
Ha 10 anni! :sofico:
Evidentemente si... nell'msdn fornita su cd con il mcvs .net 2003 non c'è traccia della cosa (anzi direttamente kbhit rimanda su _kbhit senza avere una sua paginetta di interludio).
C'è ancora !!!
Function Required header Compatibility
fgets <stdio.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP
fgetws <stdio.h> or <wchar.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.