Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3522 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Press any key...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Press any key...

n°156350
beary
Posté le 11-06-2002 à 02:21:34  profilanswer
 

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... ;)

mood
Publicité
Posté le 11-06-2002 à 02:21:34  profilanswer
 

n°156356
nraynaud
lol
Posté le 11-06-2002 à 04:58:29  profilanswer
 

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
n°156358
apolon34
Vive Linux!!
Posté le 11-06-2002 à 05:43:40  profilanswer
 

getc(stdin);
 
il attendra

n°156360
SoWhatIn22
Posté le 11-06-2002 à 08:08:29  profilanswer
 

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+

n°156386
apolon34
Vive Linux!!
Posté le 11-06-2002 à 09:44:47  profilanswer
 

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

n°156484
slvn
Posté le 11-06-2002 à 11:14:17  profilanswer
 

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..)

n°156501
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2002 à 11:39:32  profilanswer
 

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


---------------
Le Tyran
n°156553
beary
Posté le 11-06-2002 à 13:30:32  profilanswer
 

merci beaucoup pour toutes vos réponses  :love:

n°156565
SoWhatIn22
Posté le 11-06-2002 à 13:43:52  profilanswer
 

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.

n°156568
kjus
Posté le 11-06-2002 à 13:50:28  profilanswer
 

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

mood
Publicité
Posté le 11-06-2002 à 13:50:28  profilanswer
 

n°156571
kjus
Posté le 11-06-2002 à 13:51:32  profilanswer
 

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

n°156584
apolon34
Vive Linux!!
Posté le 11-06-2002 à 14:00:13  profilanswer
 

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?

n°156588
slvn
Posté le 11-06-2002 à 14:03:09  profilanswer
 

getc = macro  :d

n°156595
helvetik
Posté le 11-06-2002 à 14:08:29  profilanswer
 

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---
n°156605
apolon34
Vive Linux!!
Posté le 11-06-2002 à 14:20:24  profilanswer
 

slvn a écrit a écrit :

getc = macro  :d  




 
et alors ??
 
macro ansi c au poil

n°156613
El_gringo
Posté le 11-06-2002 à 14:23:48  profilanswer
 

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 !

n°156672
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2002 à 15:07:26  profilanswer
 

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
n°156692
El_gringo
Posté le 11-06-2002 à 15:14:42  profilanswer
 

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

n°156705
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2002 à 15:23:43  profilanswer
 

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


---------------
Le Tyran
n°156711
El_gringo
Posté le 11-06-2002 à 15:28:27  profilanswer
 

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

n°156724
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2002 à 15:36:52  profilanswer
 

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


---------------
Le Tyran
n°156730
SoWhatIn22
Posté le 11-06-2002 à 15:39:01  profilanswer
 

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é.

n°156753
El_gringo
Posté le 11-06-2002 à 15:59:37  profilanswer
 

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.

n°156832
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2002 à 16:28:08  profilanswer
 

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


---------------
Le Tyran
n°156839
El_gringo
Posté le 11-06-2002 à 16:34:31  profilanswer
 

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é.

n°156850
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2002 à 16:42:53  profilanswer
 

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
n°156852
El_gringo
Posté le 11-06-2002 à 16:43:36  profilanswer
 

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 !

n°157022
apolon34
Vive Linux!!
Posté le 11-06-2002 à 19:31:13  profilanswer
 

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

n°157694
LeGreg
Posté le 12-06-2002 à 15:23:26  profilanswer
 

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

n°157701
LeGreg
Posté le 12-06-2002 à 15:25:48  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Press any key...

 

Sujets relatifs
[java] je voudrais utiliser le press papier getSystemClipboard()Press any key to continue
Plus de sujets relatifs à : [C] Press any key...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)