Entra

View Full Version : da getch() a int


lucas72
04-06-2004, 18:02
Ciao
in un programma rilevo la pressione del tasto ESC
così:

......
#include <conio.h>

#define ESC_KEY 27

.........

int tasto=0;


tasto = getch(); // tasto premuto

...ecc ecc

Il problema è che se effettivamente viene premuto il
tasto ESC della tastiera ho impostato un ciclo if che fa uscire
dalla funzione, ma non so come fare per assegnare un valore
numerico a questo punto a "tasto" in modo che a sua volta
sia assegnato ad un'altra variabile int che deve essere passata ad
una funzione.

Ho provato e riprovato ma produco sempre errori differenti
anche se molte volte il codice si compila (ma il programma ad un cero punto
si blocca)
che mi dite?
grazie

lalli83
04-06-2004, 18:21
se mi rispieghi il tutto vedo se posso aiutarti, non ho capito molto bene il tuo problema....:(

cionci
04-06-2004, 18:29
A tasto è già assegnato un valore numerico...

lucas72
05-06-2004, 12:28
ecco il codice:


....
#include <conio.h>

#define ESC_KEY 27

.........

else if (scelta == 10){
cout<<"Vuoi modificare i dati di quale libro?"<<endl;
cout<<"Numero posizione: ";
int tasto=0;
tasto = getch(); // tasto premuto
if ( tasto!=ESC_KEY ){
cin>>posmod;
modificaContatto (rubrica,contatto, posmod);
aggiungiModifica (rubrica,contatto, posmod);
}


devo praticamente inserire il numero posizione 2
volte.
ad esempio voglio passere il numero posizione 1 devo premere 2 volte 1 perchè la prima volta comunica che non si tratta del tasto ESC.
Vorrei che il valore di tasto (a meno che non sia proprio esc)
sia assegnato in questo caso a posmod.
Chiaro?
Grazie e ciao

cionci
05-06-2004, 12:31
posmod = tasto - '0';

lucas72
06-06-2004, 10:50
Originariamente inviato da cionci
posmod = tasto - '0';


ciao e grazie

mi spieghi, per favore, perche - '0'?
che significa?

cionci
06-06-2004, 13:00
Perchè la tabella dei codici ASCII pone i numeri in questo modo:

0
1
2
3
4
5
6

In pratica sono codici consecutivi, quindi se togli dalla codifcia di un numero lo zero...hai il numero ;)

lucas72
07-06-2004, 17:55
e se posmod fosse stato un char o char[] (oppure string)
come bisognava procedere?
grazie e ciao.

cionci
07-06-2004, 18:00
Se è char:
posmod = tasto;
Se è char[]:
posmod[i] = tasto;

lucas72
09-06-2004, 18:36
con una variabile di tipo string non funziona.

cionci
09-06-2004, 18:38
string st;

....
st.push_back(tasto);
....

lucas72
11-06-2004, 18:31
scusami ancora
ho provato a fare così
nel mio programma:

cout <<"Inserisci Titolo: ";
tasto = getch(); // tasto premuto
if (tasto!=ESC_KEY)
{
contatto.titolo.push_back(tasto);

......
......

else
{
return;
}

Se il tasto premuto non è esc
la stringa (titolo che fa parte di una struttura)
dovrebbe essere assegnata a contatto.titolo
ma esco fuori comunque dal ciclo
al primo tasto battuto.
Forse non mi sono spiegato bene e/o
non ho capito.
grazie

cionci
11-06-2004, 19:29
Fammi vedere un po' più codice...ad esempio non vedo cicli ;)

lucas72
13-06-2004, 11:27
Originariamente inviato da cionci
Fammi vedere un po' più codice...ad esempio non vedo cicli ;)

ma praticamente il codice sopra è richiamato da questo che già conosci:

void modificaContatto (lstRubrica &rubrica,datiRubrica &contatto,int posmod){
cin.ignore();
int tasto=0;
int mod = 0;
int i = 0;
i = posmod-1;
cout << "Quale modifica vuoi apportare ai dati del libro?"<<endl;
cout << " 1. Al Titolo"<<endl<<" 2. All' Autore"<<endl<<" 3. All'Editore"<<endl;
cout << " 4. Al Prezzo"<<endl<<" 5. Tutti"<<endl<<" 6. Disponibilita'"<<endl;
cout <<"Scelta: ";
tasto = getch(); // tasto premuto
if ( tasto!=ESC_KEY){
mod=tasto - '0';cout<<mod;
}
else
{
return ;

}


Il codice dell'intero programma è troppo lungo.
Se ti serve fammi sapere?
ciao e grazie

cionci
13-06-2004, 11:32
Appunto dicevo che non vedevo cicli ;)
while (tasto!=ESC_KEY)
{
contatto.titolo.push_back(tasto);

......
......

else
{
return;
}