Press any key... [C] - C++ - Programmation
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).
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+
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
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..)
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
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.
Marsh Posté le 11-06-2002 à 13:50:28
#include <conio.h>
et getch(); a la fin du prog ca marche merveilleusement bien
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..
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?
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?!
Marsh Posté le 11-06-2002 à 14:20:24
slvn a écrit a écrit : getc = macro ![]() |
et alors ??
macro ansi c au poil
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 !
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.
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 !
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
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 ! ![]() |
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 !
Marsh Posté le 11-06-2002 à 15:36:52
Ok, t'as des circonstance aténuantes
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é.
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.
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
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é.
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.
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 !
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
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
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
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
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...