[C] Press any key...

Press any key... [C] - C++ - Programmation

Marsh Posté le 11-06-2002 à 02:21:34    

Comment je peux faire dans une appli console en C pour qu'à la fin le prog affiche le bien connu "Press any key to exit..." ou un truc dans le genre et quitte ensuite. J'ai essayé avec un scanf ou un getchar mais ça marche pô, il sort sans attendre :(  
 
Merci d'avance pour vos réponses... ;)

Reply

Marsh Posté le 11-06-2002 à 02:21:34   

Reply

Marsh Posté le 11-06-2002 à 04:58:29    

Beary a écrit a écrit :

Comment je peux faire dans une appli console en C pour qu'à la fin le prog affiche le bien connu "Press any key to exit..." ou un truc dans le genre et quitte ensuite. J'ai essayé avec un scanf ou un getchar mais ça marche pô, il sort sans attendre :(  
 
Merci d'avance pour vos réponses... ;)  




 
je vois pas en quoi getchar ne fonctionne pas, vide le buffer du clavier d'abord si t'es inquiet (mais tu ne devrais pas le faire, c'est mal).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-06-2002 à 05:43:40    

getc(stdin);
 
il attendra

Reply

Marsh Posté le 11-06-2002 à 08:08:29    

Pour une application console en C sous win, le mieux c'est
 
#include "conio.h"    /* Attention, windows only :-( */
#include "windows.h"
 
void main(void)
{
   /* ... */
 
   printf("Press any key to exit...\n" );
   while(!kbhit()) ::Sleep(100);
    exit();
 
   /* ... */
}
 
 
La fonction kbhit retourne dès qu'une touche du clavier est enfoncée.
 
a+

Reply

Marsh Posté le 11-06-2002 à 09:44:47    

SoWhatIn22 a écrit a écrit :

Pour une application console en C sous win, le mieux c'est
 
#include "conio.h"    /* Attention, windows only :-( */
#include "windows.h"
 
void main(void)
{
   /* ... */
 
   printf("Press any key to exit...\n" );
   while(!kbhit()) ::Sleep(100);
    exit();
 
   /* ... */
}
 
 
La fonction kbhit retourne dès qu'une touche du clavier est enfoncée.
 
a+  




 
ouais sauf que c'est laid et que kbhit c'est pas du c ansi, donc non portable
 
sympa pour les autres....
 
y a pas que windows dans la vie

Reply

Marsh Posté le 11-06-2002 à 11:14:17    

termios.h sous unix (-> passer le terminal en mode canonique)
 
ou alors, fcntl -> rendre le flux stdin non blockant ..
(pour pas que getchar() attente une touche + entrée..)

Reply

Marsh Posté le 11-06-2002 à 11:39:32    

Tu peux aussi mettre getchar et remplacer pressez une touche par appuyez sur entrée, ça le fait aussi :D


---------------
Le Tyran
Reply

Marsh Posté le 11-06-2002 à 13:30:32    

merci beaucoup pour toutes vos réponses  :love:

Reply

Marsh Posté le 11-06-2002 à 13:43:52    

apolon34 a écrit a écrit :

 
 
ouais sauf que c'est laid et que kbhit c'est pas du c ansi, donc non portable
 
sympa pour les autres....
 
y a pas que windows dans la vie  




 
je sais bien que c'est pas portable. C'est même la première chose que je dis.
Maintenant si les autres ils veulent une autre solution parce que celle là ne leur convient pas, alors ils demandent.
 
kbhit c'est tout SAUF du C ANSI, n'empeche que pour une application console sous windows, c'est bien pratique, rapide, et efficace.
D'autant que pour le moment c'est la seule réponse valide pour une appli console sous windows. Les autres méthodes obligent d'avoir un appui sur la touche 'Enter' avant de retourner.
 
Je serai d'ailleurs curieux de connaitre une autre méthode, car je n'en ai pas trouvé. Pas trop envie de chercher, c'est vrai.

Reply

Marsh Posté le 11-06-2002 à 13:50:28    

#include <conio.h>
 
et getch(); a la fin du prog ca marche merveilleusement bien

Reply

Marsh Posté le 11-06-2002 à 13:50:28   

Reply

Marsh Posté le 11-06-2002 à 13:51:32    

ou alors c #include <stdio.h> ou <stdlib.h> je sais pu très bien, mais la fonction marche très bien..

Reply

Marsh Posté le 11-06-2002 à 14:00:13    

SoWhatIn22 a écrit a écrit :

 
 
je sais bien que c'est pas portable. C'est même la première chose que je dis.
Maintenant si les autres ils veulent une autre solution parce que celle là ne leur convient pas, alors ils demandent.
 
kbhit c'est tout SAUF du C ANSI, n'empeche que pour une application console sous windows, c'est bien pratique, rapide, et efficace.
D'autant que pour le moment c'est la seule réponse valide pour une appli console sous windows. Les autres méthodes obligent d'avoir un appui sur la touche 'Enter' avant de retourner.
 
Je serai d'ailleurs curieux de connaitre une autre méthode, car je n'en ai pas trouvé. Pas trop envie de chercher, c'est vrai.  




 
windows, toujours windows....
 
sinon, getc(stdin) de stdio.h marche tres bien pour ce genre de choses, et en plus c'est ansi
 
elle est pas belle la vie?

Reply

Marsh Posté le 11-06-2002 à 14:03:09    

getc = macro  :d

Reply

Marsh Posté le 11-06-2002 à 14:08:29    

nraynaud a écrit a écrit :

 
 
vide le buffer du clavier d'abord si t'es inquiet (mais tu ne devrais pas le faire, c'est mal).  




 
comment ca c mal?!


---------------
---helvetik---
Reply

Marsh Posté le 11-06-2002 à 14:20:24    

slvn a écrit a écrit :

getc = macro  :d  




 
et alors ??
 
macro ansi c au poil

Reply

Marsh Posté le 11-06-2002 à 14:23:48    

nraynaud a écrit a écrit :

 
 
je vois pas en quoi getchar ne fonctionne pas, vide le buffer du clavier d'abord si t'es inquiet (mais tu ne devrais pas le faire, c'est mal).  




 
c pas mal, c même fortement conseillé de faire un fflush avant de demander une entrée clavier !

Reply

Marsh Posté le 11-06-2002 à 15:07:26    

NON!
 
Y en a pas besoin sauf si on passe après des gens qui programment comme des porcs et qui vident pas le buffer d'entrée après s'en être servis.
fflush comme son nom l'indique et comme le dit très bien un de mes profs ça s'utilise comme la chasse d'eau APRES S'ETRE SERVI DES TOILETTES.


---------------
Le Tyran
Reply

Marsh Posté le 11-06-2002 à 15:14:42    

letoII a écrit a écrit :

NON!
 
Y en a pas besoin sauf si on passe après des gens qui programment comme des porcs et qui vident pas le buffer d'entrée après s'en être servis.
fflush comme son nom l'indique et comme le dit très bien un de mes profs ça s'utilise comme la chasse d'eau APRES S'ETRE SERVI DES TOILETTES.  




 
Sauf que:
 - Un petit fflush, ça consome rien. Si ça gaspillai pas de l'eau, je tirerai aussi la chasse en arrivant aux chiottes.
 - Des résidus de saleté numérique, ça sent pas mauvais ! :D

Reply

Marsh Posté le 11-06-2002 à 15:23:43    

Ben ouai mais ça fait pas de mal un peu de temps en temps de faire du code propre :D


---------------
Le Tyran
Reply

Marsh Posté le 11-06-2002 à 15:28:27    

el_gringo a écrit a écrit :

 
 
Sauf que:
 - Un petit fflush, ça consome rien. Si ça gaspillai pas de l'eau, je tirerai aussi la chasse en arrivant aux chiottes.
 - Des résidus de saleté numérique, ça sent pas mauvais ! :D  




 
Sur ce coup là, t'as raison.
Mais, dans mon cas, g pas l'choix. Je bosse dans une boite ou on maintient de programme qui ont 10ans, voir plus. Le noyeau est tjs le même. Il y a 10 ans, la programmation propre, c'était pas encore bien au gout du jour ! :D

Reply

Marsh Posté le 11-06-2002 à 15:36:52    

Ok, t'as des circonstance aténuantes ;)


---------------
Le Tyran
Reply

Marsh Posté le 11-06-2002 à 15:39:01    

apolon34 a écrit a écrit :

 
 
windows, toujours windows....
 
sinon, getc(stdin) de stdio.h marche tres bien pour ce genre de choses, et en plus c'est ansi
 
elle est pas belle la vie?  




 
Je sais bien que ya pas que windows. Dailleurs j'ai que du Linux chez moi, et je programme avec. WIndows, c'est seulement au boulot.
Tu remarqueras quand même que ton getc(stdin) ne réponds pas à la question posée car il faut appuyer sur la touche 'Enter' avant que la fonction retourne.
Je pense que c'est tout à fait satisfaisant, n'empeche que ta réponse ne répond pas à la question. Elle a beau être plus élégante, portable, ou je ne sais quoi, tu ne résouds pas le problème posé.

Reply

Marsh Posté le 11-06-2002 à 15:59:37    

letoII a écrit a écrit :

Ok, t'as des circonstance aténuantes ;)  




 
Par contre, je maintient que, ds tous les cas, un fflush, avant une entrée, ça fait pas de mal.

Reply

Marsh Posté le 11-06-2002 à 16:28:08    

Comme faire 5 fois le tour d'un bâtiment avant d'entrer, mais bon c pas forcément utile :)


---------------
Le Tyran
Reply

Marsh Posté le 11-06-2002 à 16:34:31    

letoII a écrit a écrit :

Comme faire 5 fois le tour d'un bâtiment avant d'entrer, mais bon c pas forcément utile :)  




 
Mais ne pas faire de fflush, ça veut dire avoir une confiance aveugle en l'application --> soit on l'a développée soit même et on est sur de son coup, donc, pas de pb. Soit qqn d'autre à déja touché à l'appli, auquel cas je préfère faire un fflush qui, je l'répète, ne coute rien, et rajoute un sécurité.

Reply

Marsh Posté le 11-06-2002 à 16:42:53    

el_gringo a écrit a écrit :

 
 
soit on l'a développée soit même et on est sur de son coup, donc, pas de pb.



 
D'où l'intéret de les faire systématiquement après s'être servi de l'entrée.


---------------
Le Tyran
Reply

Marsh Posté le 11-06-2002 à 16:43:36    

letoII a écrit a écrit :

 
 
D'où l'intéret de les faire systématiquement après s'être servi de l'entrée.  




 
g jammais dit le contraire !

Reply

Marsh Posté le 11-06-2002 à 19:31:13    

SoWhatIn22 a écrit a écrit :

 
 
Je sais bien que ya pas que windows. Dailleurs j'ai que du Linux chez moi, et je programme avec. WIndows, c'est seulement au boulot.
Tu remarqueras quand même que ton getc(stdin) ne réponds pas à la question posée car il faut appuyer sur la touche 'Enter' avant que la fonction retourne.
Je pense que c'est tout à fait satisfaisant, n'empeche que ta réponse ne répond pas à la question. Elle a beau être plus élégante, portable, ou je ne sais quoi, tu ne résouds pas le problème posé.  




 
en effet, tu as raison.
 
Mea culpa :jap:  
 
je pense que la seule solution restante est de passer le clavier en non bloquant et de tester getchar() a chaque fois..
 
il doit surement y avoir une maniere plus propre de faire cela

Reply

Marsh Posté le 12-06-2002 à 15:23:26    

Il n'y a pas de maniere propre (definie clairement par le standard C) de flusher un flux entrant (contrairement a un  
flux sortant).
Toute solution adoptee est propre a l'application  
et le fonctionnement de fflush(stdin) est dependant de  
l'implantation par le fournisseur de la librairie standard.
 
Maintenant, il faut savoir ce que vous voulez flusher c'est ca qui est important. En C ansi, il est prevu qu'on puisse
rediriger un fichier vers l'entree standard, maintenant allez savoir ce qui se passe si vous flushez..
 
Conclusion => toute solution adoptee sera propre a votre application et a votre systeme  
et ne pourra pas etre estampillée "ANSI"  
donc l'utilisation de "conio.h" est un moindre mal si  
vous developpez sous Windows.
 
LeGreg

Reply

Marsh Posté le 12-06-2002 à 15:25:48    

n'oubliez pas non plus qu'il y a des personnes qui aiment
taper vite et a qui ca plait moyennement
que l'application "oublie" une partie des mots qu'ils viennent de frapper. Ca c'est pour le cote "user friendly"
 
LeGreg

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed