OVH Cloud OVH Cloud

getch() & cout

16 réponses
Avatar
ericmas001
J'ai trouver un moyen pour faire fonctionner un getch() avec des cout<<

"cout<<endl;" toujours avant mon getch().

Ya-t-il une équivalence en c++ du getch() qui serait plus compatible avec le cout ?

10 réponses

1 2
Avatar
Arnaud Meurgues
?ric Mass? wrote:

J'ai trouver un moyen pour faire fonctionner un getch() avec des cout<<
"cout<<endl;" toujours avant mon getch().


Un flush() devrais suffire, non ?

Ya-t-il une équivalence en c++ du getch() qui serait plus compatible avec le cout ?


Pas que je sache, non. getch() retourne dès l'appuie d'une touche, c'est
ça ? Si c'est le cas, alors il faut chercher du côté de ncurses pour
avoir quelque chsoe de portable.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
Horst Kraemer
(?ric Mass?) wrote:

J'ai trouver un moyen pour faire fonctionner un getch() avec des cout<<

"cout<<endl;" toujours avant mon getch().


Qu'est qui ne "fonctionne" pas sans cout<<endl ?

--
Horst

--
Lâche pas la patate!

Avatar
Fabien LE LEZ
On Thu, 18 Nov 2004 18:14:49 +0100, Horst Kraemer
:

Qu'est qui ne "fonctionne" pas sans cout<<endl ?


J'imagine que l'op ne connaissait pas flush()...


--
;-)

Avatar
Christophe Lephay
Horst Kraemer wrote:
(?ric Mass?) wrote:

J'ai trouver un moyen pour faire fonctionner un getch() avec des
cout<<

"cout<<endl;" toujours avant mon getch().


Qu'est qui ne "fonctionne" pas sans cout<<endl ?


C'est le problème récurrent lorsqu'on utilise les I/O héritées du C avec les
flux du C++. C'est un problème de synchronisation des buffers entre les unes
et les autres (ce que règle le endl comme le flush).

Chris


Avatar
Fabien LE LEZ
On Thu, 18 Nov 2004 19:29:28 +0100, "Christophe Lephay"
:

C'est le problème récurrent lorsqu'on utilise les I/O héritées du C avec les
flux du C++.


getch() n'a rien à voir avec les I/O du C.
Par contre, quand on l'appelle (et donc quand le programme se fige en
attendant une touche), tout ce qui a été envoyé sur cout n'est pas
forcément présent à l'écran en l'absence de flush().


--
;-)

Avatar
Christophe Lephay
Fabien LE LEZ wrote:
On Thu, 18 Nov 2004 19:29:28 +0100, "Christophe Lephay"
:

C'est le problème récurrent lorsqu'on utilise les I/O héritées du C
avec les flux du C++.


getch() n'a rien à voir avec les I/O du C.
Par contre, quand on l'appelle (et donc quand le programme se fige en
attendant une touche), tout ce qui a été envoyé sur cout n'est pas
forcément présent à l'écran en l'absence de flush().


Bah, je dirais qu'il en est dans la lignée même s'il ne fait pas partie du C
standard. La problématique reste la même.

Chris


Avatar
Fabien LE LEZ
On Thu, 18 Nov 2004 20:38:30 +0100, "Christophe Lephay"
:

Bah, je dirais qu'il en est dans la lignée


Non.

La problématique reste la même.


Pas vraiment. Ce que tu évoques est le manque de synchronisation entre
cout et printf, qui a pour résultat d'afficher les informations dans
le désordre. Ici, le problème est plus simple : il s'agit du fait que
le buffering empêche le programmeur d'être sûr que l'affichage est
complet à un point donné de l'exécution du programme (à moins
d'appeler flush explicitement). Remplacer "getch" par un "sleep"
quelconque, par exemple, ne changerait rien au problème.


--
;-)

Avatar
Christophe Lephay
Fabien LE LEZ wrote:
On Thu, 18 Nov 2004 20:38:30 +0100, "Christophe Lephay"
:

Bah, je dirais qu'il en est dans la lignée


Non.


Pour ce que je me rappelle du getch, c'etait en premier lieu une extension
des I/O du C standard sur leur compilo Turbo C.

La problématique reste la même.


Pas vraiment. Ce que tu évoques est le manque de synchronisation entre
cout et printf, qui a pour résultat d'afficher les informations dans
le désordre. Ici, le problème est plus simple : il s'agit du fait que
le buffering empêche le programmeur d'être sûr que l'affichage est
complet à un point donné de l'exécution du programme (à moins
d'appeler flush explicitement). Remplacer "getch" par un "sleep"
quelconque, par exemple, ne changerait rien au problème.


Ben "le manque de synchronisation entre cout et printf" et "le buffering qui
empeche d'etre sur que l'affichage est complet", c'est pas un peu la même
chose ?

Chris


Avatar
drkm
"Christophe Lephay" writes:

Ben "le manque de synchronisation entre cout et printf" et "le buffering qui
empeche d'etre sur que l'affichage est complet"


"... avant une entrée".

c'est pas un peu la même
chose ?


Non. Mais ça a avoir dans les deux cas avec le buffering des
sorties.

--drkm

Avatar
Jean-Marc Bourguet
drkm writes:

"Christophe Lephay" writes:

Ben "le manque de synchronisation entre cout et printf"
et "le buffering qui empeche d'etre sur que l'affichage
est complet"



Je rappelle l'existante en C++ de
std::ios_base::sync_with_std_io()
qui retourne true au premier appel (autrement dit il ne
devrait pas y avoir de problèmes de synchronisation entre
les cin et stdin d'une part cout, cerr, clog et stdout,
stderr de l'autre.

"... avant une entrée".

c'est pas un peu la même chose ?


Non. Mais ça a avoir dans les deux cas avec le buffering des
sorties.


De même cin est "tied" avec cout, ce qui fait que les
demande d'entrées sur cin vide le tampon de cout (et stdout
si on n'a pas utilisé sync_with_std_io).

Il n'y a pas une telle synchronisation pour stdin avec
stdout, mais par contre stdout est souvent bufferisé par
ligne quand il est connecté à un terminal, ce qui n'existe
pas en C++.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


1 2