PDA

View Full Version : [c++ ]problema getch()


enzolabbate
25-06-2006, 22:55
mi sapete dire xome mai quando eseguo questa istruzione:

cout<<"Salvare? (s/n): ";r=getche();

mi chiede prima il valore della variabile e poi mi stampa "Salvare? (s/n)"?
se mi rispondete mi fareste un grandissimo piacere...è per un esameeee!
se avete alternative alla getch va nache bene..
Grazie 1000

Black imp
26-06-2006, 00:26
non so se è questa la causa però posso dirti che diverse volte programmando e usando thread diversi o addirittura processi diversi, le printf potevano essere differite apparentemente a caso per cui l'ordine delle scritte non era mai quello voluto. può essere che quando il sistema cerca di stampare a video passa intanto all'istruzione successiva la quale arriva prima e prendere la risorsa video. non saprei che altro dirti

trallallero
26-06-2006, 07:45
mi sapete dire xome mai quando eseguo questa istruzione:

cout<<"Salvare? (s/n): ";r=getche();

mi chiede prima il valore della variabile e poi mi stampa "Salvare? (s/n)"?
se mi rispondete mi fareste un grandissimo piacere...è per un esameeee!
se avete alternative alla getch va nache bene..
Grazie 1000
getche ? io conosco getch, ungetch etc ma getche
non l'ho mai vista. Infatti non la vede neanche il man ;)

Comunque le varie funzioni getch danno problemi se non si ha dimestichezza con
i "curses". É che la mitica Borland ci ha viziato con le sue funzioni
get...() ... kbhit() ... poi passi su linux o unix e ... non vanno piú :(
Ti posto quello che dice il man:


...
When using getch(), wgetch(), mvgetch(), or mvwgetch(), noc-
break mode (nocbreak()) and echo mode (echo()) should not be
used at the same time. Depending on the state of the tty
driver when each character is typed, the program may produce
undesirable results.


l'alternativa che ti posso consigliare:


cout << "Salvare? (s/n): ";
cin >> r;


ciao

andbin
26-06-2006, 08:27
mi sapete dire xome mai quando eseguo questa istruzione:

cout<<"Salvare? (s/n): ";r=getche();

mi chiede prima il valore della variabile e poi mi stampa "Salvare? (s/n)"?
se mi rispondete mi fareste un grandissimo piacere...è per un esameeee!
se avete alternative alla getch va nache bene..Allora... intanto c'è da dire alcune cose: getche fa parte della libreria conio (conio.h), che non è "standard". getche è praticamente uguale a getch solo che mentre quest'ultima non fa l'eco del carattere, la getche fa l'eco del carattere.
Per il fatto che il tuo codice presenta quel comportamento anomalo, presumo che sia un banale problema di buffering. La gestione dell'output con cout è "bufferizzata" mentre getch/getche lavorano direttamente con il terminale.

A dire il vero ho provato il tuo codice sopra usando VC++.net 2003 e posso assicurare che, per la prova che ho fatto, si comporta correttamente, cioè prima stampa il testo e poi richiede il carattere. Non so dirti perché, probabilmente dipende anche dalla implementazione specifica della libreria.

Comunque per essere sicuri che funzioni in ogni caso, puoi fare:
cout<<"Salvare? (s/n): ";
cout.flush ();
r=getche();in questo modo cout viene forzato a scrivere l'output a video.

trallallero
26-06-2006, 09:38
Allora... intanto c'è da dire alcune cose: getche fa parte della libreria conio (conio.h), che non è "standard".

conio.h! Borland, che ricordi :) (Turbo C++ 3.n)
ma conio non era solo della Borland ?
mi ricordo che col VC avevo avuto dei problemi con la getch()
ma parlo del '99, vaghi ricordi e poca esperienza ...

enzolabbate
26-06-2006, 09:42
andbin sei un diooo! aggiungendo la flush funziona alla grande!all'esame scrivero sotto "si ringrazia la collaborazione di andbin". ciao