|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Torino
Messaggi: 712
|
Aiuto istruzioni C/C++
Ciao! ho un problema, sto facendo un programma, ed ho bisogno che mentre è in esecuzione posso premere alcuni tasti e fare cambiare dei valori alle variabili senza aspettare l'invio come succede con il cin o con lo scanf...
sapete se c'è qualche istruzione adatta (uso il turbo C++ e sn un principiante) devo simulare il funzionamento di un flip-flop JK...devo cambiare i valori di J e di K al volo mentre il clock sale e scende... Grazie. CIAO!
__________________
Ryzen 1600 - RTX 3060- Msi X370 - corsair 600gs - 16GB Corsair 3200 - iiyama LCD ---- ho fatto affari su mercatino con wubby, kisser, Pether, Airbus77, mrmic, gup133, buster, Nikydbp, rcurle, molti altri di cui ho perso i dati + 100 feedback ebay 100% pos
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
....Spiegati meglio, con più calma.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Torino
Messaggi: 712
|
Scusate se non mi sono spiegato bene...
Faccio un esempio: Faccio un programma con un ciclo for infinito che ad ogni ciclo mostra il valore di una variabile X. Io ho bisogno di cambiare il valore della variabile X mentre il programma è in esecuzione, senza interrompere il ciclo for... In pratica devo fare questo...mi sono spiegato? Grazie!
__________________
Ryzen 1600 - RTX 3060- Msi X370 - corsair 600gs - 16GB Corsair 3200 - iiyama LCD ---- ho fatto affari su mercatino con wubby, kisser, Pether, Airbus77, mrmic, gup133, buster, Nikydbp, rcurle, molti altri di cui ho perso i dati + 100 feedback ebay 100% pos
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
con il metodo get della classe istream puoi leggere un carattere alla volta.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Torino
Messaggi: 712
|
mmm..grazie non e che potresti scrivermim una riga di codice di esempio... Grazie 1000!
__________________
Ryzen 1600 - RTX 3060- Msi X370 - corsair 600gs - 16GB Corsair 3200 - iiyama LCD ---- ho fatto affari su mercatino con wubby, kisser, Pether, Airbus77, mrmic, gup133, buster, Nikydbp, rcurle, molti altri di cui ho perso i dati + 100 feedback ebay 100% pos
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
con
Codice:
char c = cin.get(); Se inoltre vuoi solo controllare se siano stati premuti tasti, ed eventualmente continuare l'esecuzione in caso contrario puoi usare il metodo in_avail() ( o avail ? Codice:
if ( cin.in_avail() )
{
// questa chiamata non blocca l'esecuzione
char c = cin.get();
/* bla bla */
}
else
{
// nessun input ! facciamo altro
}
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
Quote:
Per usare in_avail mi sembra serva questa notazione Codice:
( cin.rdbuf() )->in_avail()
__________________
powered by GNU/Linux [ Debian Sid ] |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Torino
Messaggi: 712
|
Grazie! appena riesco li provo... vi faccio sapere.
__________________
Ryzen 1600 - RTX 3060- Msi X370 - corsair 600gs - 16GB Corsair 3200 - iiyama LCD ---- ho fatto affari su mercatino con wubby, kisser, Pether, Airbus77, mrmic, gup133, buster, Nikydbp, rcurle, molti altri di cui ho perso i dati + 100 feedback ebay 100% pos
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
[quote]Originariamente inviato da xybercom
A me con Linux non funziona, cin.get() legge sì un carattere alla volta ma "riceve" i caratteri solo dopo che ho premuto return. [quote] argh... hai ragione, sotto linux i terminali sono generalmente bufferizzati linea per linea. Ho paura che per leggerne uno alla volta bisogni impostare qualche parametro con tcsetattr (ma, tanto per cambiare, non ne sono sicuro Codice:
( cin.rdbuf() )->in_avail() |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
\/\@®¢Ø ho provato anche in ambiente Windows (XP) e il comportamento è lo stesso sia con mingw che con VC .NET.
Sotto Linux comunque ho risolto sbirciando un programma C del "maestro" Eric Raymond http://www.catb.org/~esr/ (showkey.c). Il programma funzionante è questo: Codice:
/* Shows the keys pressed by a user
* Based on Eric Raymond 's showkey.c
*/
#include <iostream>
#include <termios.h>
using namespace std;
int main()
{
// Get the state of the tty
termios original;
tcgetattr( 0, &original );
// Make a copy we can mess with
termios raw = original;
// Turn off echoing, ->> linebuffering <<- , and special-character processing,
raw.c_lflag &= ~( ICANON | ECHO );
// set the new state
tcsetattr( 0, TCSANOW, &raw );
cout << "\nPress some keys..., 'q' to exit" << endl;
bool stop = false;
unsigned int counter = 0;
while ( !stop )
{
++counter;
char c = cin.get();
cout << "\nYou pressed \'" << c << "\'" << " ( " << static_cast<int> (c) << " ), total characters " << counter << endl;
stop = ( c == 'q' );
}
// restore the original state for the tty
tcsetattr( 0, TCSANOW, &original );
return 0;
}
__________________
powered by GNU/Linux [ Debian Sid ] |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Sep 2002
Città: vinci-spicchio
Messaggi: 530
|
altrimenti usa la kbhit();
__________________
Intel Pentium DualCore E2140 1,60 GHz , Asus P5LD2 R2.0,Sapphire x600xt 128Mb,hauppauge winTV,2x256Mb Ddr2 Vitesta 533Mhz,western digital caviar 160gb, seagate 20gb 5400giri, maxtor 40gb 7200giri, dvd+-rw gigabyte(BTC) 4x,Samsung writemaster dvd duallayer 18x , edimax wireless<-->router D-link G604T. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
e per fare la stessa cosa in c (sempre ambiente windows?)
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
Quote:
E' solo per Borland (ciò non toglie che possa essere comoda...
__________________
powered by GNU/Linux [ Debian Sid ] |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Torino
Messaggi: 712
|
Ciao raga..ho provato e riprovato di tutto ma nn riesco...probabilemte sono limitato da quel cavolo di compilatore(turbo c++) alla fine mi hanno detto che dovrei usare la kbhit() e che esiste una specie di variabile o qlc del genere (forse un buffer), in cui è memorizzato l'ultimo tasto premuto dalla tastiera (in Ascii mi sembra)...e dovrei tirarlo fuori da li... qualche consiglio?
grazie cmq...
__________________
Ryzen 1600 - RTX 3060- Msi X370 - corsair 600gs - 16GB Corsair 3200 - iiyama LCD ---- ho fatto affari su mercatino con wubby, kisser, Pether, Airbus77, mrmic, gup133, buster, Nikydbp, rcurle, molti altri di cui ho perso i dati + 100 feedback ebay 100% pos
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Feb 2004
Messaggi: 71
|
Mi hanno suggerito questa parte di codice:
#include <stdio.h> #include <windows.h> /* utilizzando le API di Windows */ int main() { while(1) { if (GetKeyState (VK_LEFT) < 0) printf("LEFT ") ; if (GetKeyState (VK_RIGHT) < 0) printf("RIGHT "); if (GetKeyState (32) < 0) printf("SPACE "); if (GetKeyState (65) < 0) printf("A "); Sleep(100); /* ANCHE se non premo un tasto, fai comunque qualcos'altro */ } return 0; } ... tuttavia non riesco a farci niente, mi manca la libreria windows.h, prova tu... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:21.










Ryzen 1600 - RTX 3060- Msi X370 - corsair 600gs - 16GB Corsair 3200 - iiyama LCD ---- ho fatto affari su mercatino con wubby, kisser, Pether, Airbus77, mrmic, gup133, buster, Nikydbp, rcurle, molti altri di cui ho perso i dati + 100 feedback ebay 100% pos









