|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2006
Messaggi: 12
|
[c++ ]problema getch()
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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2658
|
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
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
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: Codice:
... 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. Codice:
cout << "Salvare? (s/n): "; cin >> r;
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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: Codice:
cout<<"Salvare? (s/n): "; cout.flush (); r=getche();
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() 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 ...
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Jun 2006
Messaggi: 12
|
andbin sei un diooo! aggiungendo la flush funziona alla grande!all'esame scrivero sotto "si ringrazia la collaborazione di andbin". ciao
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:32.