std::cout << "Appuyer sur Entrée pour continuer" << std::endl; std::string bidon; std::getline (std::cin, bidon);
Note : l'accent peut poser des problèmes si le jeu de caractères de la console n'est pas le même que celui de ton éditeur. Je ne connais pas de solution simple au problème, à part le remplacement par une lettre non accentuée.
Et comment ça se fait un "Nettoyage de la sortie console"
Ce n'est pas faisable en C++. Cf Ncurses, ou des fonctions spécifiques à ton système d'exploitation.
On Fri, 30 Dec 2005 18:31:32 +0100, Nico
<nicolasPOINpoulain@ouvaton.org>:
Comment ça se fait un truc du genre :
"Appuyer sur Entrée pour continuer"
std::cout << "Appuyer sur Entrée pour continuer" << std::endl;
std::string bidon;
std::getline (std::cin, bidon);
Note : l'accent peut poser des problèmes si le jeu de caractères de la
console n'est pas le même que celui de ton éditeur. Je ne connais pas
de solution simple au problème, à part le remplacement par une lettre
non accentuée.
Et comment ça se fait un "Nettoyage de la sortie console"
Ce n'est pas faisable en C++.
Cf Ncurses, ou des fonctions spécifiques à ton système d'exploitation.
std::cout << "Appuyer sur Entrée pour continuer" << std::endl; std::string bidon; std::getline (std::cin, bidon);
Note : l'accent peut poser des problèmes si le jeu de caractères de la console n'est pas le même que celui de ton éditeur. Je ne connais pas de solution simple au problème, à part le remplacement par une lettre non accentuée.
Et comment ça se fait un "Nettoyage de la sortie console"
Ce n'est pas faisable en C++. Cf Ncurses, ou des fonctions spécifiques à ton système d'exploitation.
Fabien LE LEZ
On Fri, 30 Dec 2005 20:05:53 +0100, Fabien LE LEZ :
Cf Ncurses
D'ailleurs, si tu veux vraiment pondre une interface potable en mode console, je ne pense pas que tu puisse échapper à ces nouvelles malédictions.
On Fri, 30 Dec 2005 20:05:53 +0100, Fabien LE LEZ
<gramster@gramster.com>:
Cf Ncurses
D'ailleurs, si tu veux vraiment pondre une interface potable en mode
console, je ne pense pas que tu puisse échapper à ces nouvelles
malédictions.
Et comment ça se fait un "Nettoyage de la sortie console" (tout s'efface et la nouvelle sortie est placée en haut dans la console)
Si ta console est un terminal ANSI (VT100), il y a ceci:
cout << "x1b[Hx1b[2J" << flush;
-- Certes.
Nico
Fabien LE LEZ m'a raconté au claviophone électronique moderne que :
On Fri, 30 Dec 2005 18:31:32 +0100, Nico :
Comment ça se fait un truc du genre :
"Appuyer sur Entrée pour continuer"
std::cout << "Appuyer sur Entrée pour continuer" << std::endl; std::string bidon; std::getline (std::cin, bidon);
Merci
ça marche quand je le teste à part ; si je le mets dans un autre programme, ça passe dessus comme si de rien était...
Y'a pas un SYSTEM_PAUSE wait SAISIE_CLAVIER ?
Nico
Note : l'accent peut poser des problèmes si le jeu de caractères de la console n'est pas le même que celui de ton éditeur. Je ne connais pas de solution simple au problème, à part le remplacement par une lettre non accentuée.
Et comment ça se fait un "Nettoyage de la sortie console"
Ce n'est pas faisable en C++. Cf Ncurses, ou des fonctions spécifiques à ton système d'exploitation.
Fabien LE LEZ m'a raconté au claviophone électronique moderne que :
On Fri, 30 Dec 2005 18:31:32 +0100, Nico
<nicolasPOINpoulain@ouvaton.org>:
Comment ça se fait un truc du genre :
"Appuyer sur Entrée pour continuer"
std::cout << "Appuyer sur Entrée pour continuer" << std::endl;
std::string bidon;
std::getline (std::cin, bidon);
Merci
ça marche quand je le teste à part ; si je le mets dans un autre
programme, ça passe dessus comme si de rien était...
Y'a pas un SYSTEM_PAUSE wait SAISIE_CLAVIER ?
Nico
Note : l'accent peut poser des problèmes si le jeu de caractères de la
console n'est pas le même que celui de ton éditeur. Je ne connais pas
de solution simple au problème, à part le remplacement par une lettre
non accentuée.
Et comment ça se fait un "Nettoyage de la sortie console"
Ce n'est pas faisable en C++.
Cf Ncurses, ou des fonctions spécifiques à ton système d'exploitation.
Fabien LE LEZ m'a raconté au claviophone électronique moderne que :
On Fri, 30 Dec 2005 18:31:32 +0100, Nico :
Comment ça se fait un truc du genre :
"Appuyer sur Entrée pour continuer"
std::cout << "Appuyer sur Entrée pour continuer" << std::endl; std::string bidon; std::getline (std::cin, bidon);
Merci
ça marche quand je le teste à part ; si je le mets dans un autre programme, ça passe dessus comme si de rien était...
Y'a pas un SYSTEM_PAUSE wait SAISIE_CLAVIER ?
Nico
Note : l'accent peut poser des problèmes si le jeu de caractères de la console n'est pas le même que celui de ton éditeur. Je ne connais pas de solution simple au problème, à part le remplacement par une lettre non accentuée.
Et comment ça se fait un "Nettoyage de la sortie console"
Ce n'est pas faisable en C++. Cf Ncurses, ou des fonctions spécifiques à ton système d'exploitation.
Cyrille
Fabien LE LEZ m'a raconté au claviophone électronique moderne que :
std::cout << "Appuyer sur Entrée pour continuer" << std::endl; std::string bidon; std::getline (std::cin, bidon);
Merci
ça marche quand je le teste à part ; si je le mets dans un autre programme, ça passe dessus comme si de rien était...
supposons que tu avais écrit avant: std::cin >> var; Alors quand l'utilisateur entre une valeur, le programme extrait les characteres et met la valeur dans var. Mais il laisse le caractère de fin de ligne dans le buffer de std::cin. Du coup, si tu appelles std::getline( ... ) ensuite, il voit tout de suite un caractère de fin de ligne et il retourne immédiatement. La solution est d'écrire: std::cin.ignore(); après l'opération ">>".
Y'a pas un SYSTEM_PAUSE wait SAISIE_CLAVIER ?
gni?
-- Soit.
Fabien LE LEZ m'a raconté au claviophone électronique moderne que :
std::cout << "Appuyer sur Entrée pour continuer" << std::endl;
std::string bidon;
std::getline (std::cin, bidon);
Merci
ça marche quand je le teste à part ; si je le mets dans un autre
programme, ça passe dessus comme si de rien était...
supposons que tu avais écrit avant:
std::cin >> var;
Alors quand l'utilisateur entre une valeur, le programme extrait les
characteres et met la valeur dans var. Mais il laisse le caractère de
fin de ligne dans le buffer de std::cin. Du coup, si tu appelles
std::getline( ... ) ensuite, il voit tout de suite un caractère de fin
de ligne et il retourne immédiatement.
La solution est d'écrire:
std::cin.ignore();
après l'opération ">>".
Fabien LE LEZ m'a raconté au claviophone électronique moderne que :
std::cout << "Appuyer sur Entrée pour continuer" << std::endl; std::string bidon; std::getline (std::cin, bidon);
Merci
ça marche quand je le teste à part ; si je le mets dans un autre programme, ça passe dessus comme si de rien était...
supposons que tu avais écrit avant: std::cin >> var; Alors quand l'utilisateur entre une valeur, le programme extrait les characteres et met la valeur dans var. Mais il laisse le caractère de fin de ligne dans le buffer de std::cin. Du coup, si tu appelles std::getline( ... ) ensuite, il voit tout de suite un caractère de fin de ligne et il retourne immédiatement. La solution est d'écrire: std::cin.ignore(); après l'opération ">>".
Y'a pas un SYSTEM_PAUSE wait SAISIE_CLAVIER ?
gni?
-- Soit.
Fabien LE LEZ
On Fri, 30 Dec 2005 23:39:11 +0100, Cyrille :
std::cin >> var; Alors quand l'utilisateur entre une valeur, le programme extrait les characteres et met la valeur dans var. Mais il laisse le caractère de fin de ligne dans le buffer de std::cin.
Si je ne m'abuse[*], c'est même pire que ça : si l'utilisateur tape "Hello World!n", "World!n" reste dans le buffer
[*] (Je n'utilise à peu près jamais operator>>, donc je ne suis pas tout à fait sûr.)
On Fri, 30 Dec 2005 23:39:11 +0100, Cyrille <cyrille@frsf.invalid>:
std::cin >> var;
Alors quand l'utilisateur entre une valeur, le programme extrait les
characteres et met la valeur dans var. Mais il laisse le caractère de
fin de ligne dans le buffer de std::cin.
Si je ne m'abuse[*], c'est même pire que ça : si l'utilisateur tape
"Hello World!n", "World!n" reste dans le buffer
[*] (Je n'utilise à peu près jamais operator>>, donc je ne suis pas
tout à fait sûr.)
std::cin >> var; Alors quand l'utilisateur entre une valeur, le programme extrait les characteres et met la valeur dans var. Mais il laisse le caractère de fin de ligne dans le buffer de std::cin.
Si je ne m'abuse[*], c'est même pire que ça : si l'utilisateur tape "Hello World!n", "World!n" reste dans le buffer
[*] (Je n'utilise à peu près jamais operator>>, donc je ne suis pas tout à fait sûr.)
Cyrille
On Fri, 30 Dec 2005 23:39:11 +0100, Cyrille :
std::cin >> var; Alors quand l'utilisateur entre une valeur, le programme extrait les characteres et met la valeur dans var. Mais il laisse le caractère de fin de ligne dans le buffer de std::cin.
Si je ne m'abuse[*], c'est même pire que ça : si l'utilisateur tape "Hello World!n", "World!n" reste dans le buffer
Oui, en fait un cin.ignore(numeric_limits<int>::max(), 'n'); est plus correct.
[*] (Je n'utilise à peu près jamais operator>>, donc je ne suis pas tout à fait sûr.)
Moi non plus.
-- Ainsi.
On Fri, 30 Dec 2005 23:39:11 +0100, Cyrille <cyrille@frsf.invalid>:
std::cin >> var;
Alors quand l'utilisateur entre une valeur, le programme extrait les
characteres et met la valeur dans var. Mais il laisse le caractère de
fin de ligne dans le buffer de std::cin.
Si je ne m'abuse[*], c'est même pire que ça : si l'utilisateur tape
"Hello World!n", "World!n" reste dans le buffer
Oui, en fait un
cin.ignore(numeric_limits<int>::max(), 'n');
est plus correct.
[*] (Je n'utilise à peu près jamais operator>>, donc je ne suis pas
tout à fait sûr.)
std::cin >> var; Alors quand l'utilisateur entre une valeur, le programme extrait les characteres et met la valeur dans var. Mais il laisse le caractère de fin de ligne dans le buffer de std::cin.
Si je ne m'abuse[*], c'est même pire que ça : si l'utilisateur tape "Hello World!n", "World!n" reste dans le buffer
Oui, en fait un cin.ignore(numeric_limits<int>::max(), 'n'); est plus correct.
[*] (Je n'utilise à peu près jamais operator>>, donc je ne suis pas tout à fait sûr.)
Moi non plus.
-- Ainsi.
James Kanze
Nico wrote:
Comment ça se fait un truc du genre :
"Appuyer sur Entrée pour continuer"
std::cin.ignore( INT_MAX ) ;
(Formellement, je crois qu'à la place de INT_MAX, il faudrait quelque chose comme « std::numeric_limits< std::ios_base::streamsize >::max() » à la place de INT_MAX. Pratiquement, ici, il suffit d'une valeur supérieur au nombre maximum de caractères qu'un utilisateur pourrait entrer sans Entrée.)
Et comment ça se fait un "Nettoyage de la sortie console" (tout s'efface et la nouvelle sortie est placée en haut dans la console)
Formellement, on ne peut pas, au moins pas d'une façon portable. Dans la pratique, il suffit de sortir assez de 'n' ; ça serait un drôle de console où : std::cout << std::string( 100, 'n' ) << std::endl ; ne faisait pas l'affaire.
Seulement, la nouvelle sortie serait placée en bas. Pour faire mieux, il faut une bibliothèque supplémentaire non-standard, du genre curses.
À la fin, laquelle des deux solutions conviennent dépend de ce que tu fais. Si le seul but, c'est de s'assurer d'un environement visuel vide pour la prochaine page de données, le coup des 100 'n' suffit largement. Si tu cherches à faire une gestion complète de l'écran, avec positionnement du curseur, etc., il te faut curses (mais il faudrait peut-être poser la question si, aujourd'hui, une GUI ne conviendrait pas mieux).
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Nico wrote:
Comment ça se fait un truc du genre :
"Appuyer sur Entrée pour continuer"
std::cin.ignore( INT_MAX ) ;
(Formellement, je crois qu'à la place de INT_MAX, il faudrait
quelque chose comme « std::numeric_limits<
std::ios_base::streamsize >::max() » à la place de INT_MAX.
Pratiquement, ici, il suffit d'une valeur supérieur au nombre
maximum de caractères qu'un utilisateur pourrait entrer sans
Entrée.)
Et comment ça se fait un "Nettoyage de la sortie console"
(tout s'efface et la nouvelle sortie est placée en haut dans
la console)
Formellement, on ne peut pas, au moins pas d'une façon portable.
Dans la pratique, il suffit de sortir assez de 'n' ; ça serait
un drôle de console où :
std::cout << std::string( 100, 'n' ) << std::endl ;
ne faisait pas l'affaire.
Seulement, la nouvelle sortie serait placée en bas. Pour faire
mieux, il faut une bibliothèque supplémentaire non-standard, du
genre curses.
À la fin, laquelle des deux solutions conviennent dépend de ce
que tu fais. Si le seul but, c'est de s'assurer d'un
environement visuel vide pour la prochaine page de données, le
coup des 100 'n' suffit largement. Si tu cherches à faire une
gestion complète de l'écran, avec positionnement du curseur,
etc., il te faut curses (mais il faudrait peut-être poser la
question si, aujourd'hui, une GUI ne conviendrait pas mieux).
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
(Formellement, je crois qu'à la place de INT_MAX, il faudrait quelque chose comme « std::numeric_limits< std::ios_base::streamsize >::max() » à la place de INT_MAX. Pratiquement, ici, il suffit d'une valeur supérieur au nombre maximum de caractères qu'un utilisateur pourrait entrer sans Entrée.)
Et comment ça se fait un "Nettoyage de la sortie console" (tout s'efface et la nouvelle sortie est placée en haut dans la console)
Formellement, on ne peut pas, au moins pas d'une façon portable. Dans la pratique, il suffit de sortir assez de 'n' ; ça serait un drôle de console où : std::cout << std::string( 100, 'n' ) << std::endl ; ne faisait pas l'affaire.
Seulement, la nouvelle sortie serait placée en bas. Pour faire mieux, il faut une bibliothèque supplémentaire non-standard, du genre curses.
À la fin, laquelle des deux solutions conviennent dépend de ce que tu fais. Si le seul but, c'est de s'assurer d'un environement visuel vide pour la prochaine page de données, le coup des 100 'n' suffit largement. Si tu cherches à faire une gestion complète de l'écran, avec positionnement du curseur, etc., il te faut curses (mais il faudrait peut-être poser la question si, aujourd'hui, une GUI ne conviendrait pas mieux).
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Fabien LE LEZ
On Sun, 01 Jan 2006 12:03:57 +0100, James Kanze :
Formellement, on ne peut pas, au moins pas d'une façon portable. Dans la pratique, il suffit de sortir assez de 'n' ; ça serait un drôle de console où : std::cout << std::string( 100, 'n' ) << std::endl ; ne faisait pas l'affaire.
Chez moi, la console fait 9999 lignes par défaut. Et balancer 10000 lignes blanches, ça risque de prendre du temps.
On Sun, 01 Jan 2006 12:03:57 +0100, James Kanze <kanze@none>:
Formellement, on ne peut pas, au moins pas d'une façon portable.
Dans la pratique, il suffit de sortir assez de 'n' ; ça serait
un drôle de console où :
std::cout << std::string( 100, 'n' ) << std::endl ;
ne faisait pas l'affaire.
Chez moi, la console fait 9999 lignes par défaut.
Et balancer 10000 lignes blanches, ça risque de prendre du temps.
Formellement, on ne peut pas, au moins pas d'une façon portable. Dans la pratique, il suffit de sortir assez de 'n' ; ça serait un drôle de console où : std::cout << std::string( 100, 'n' ) << std::endl ; ne faisait pas l'affaire.
Chez moi, la console fait 9999 lignes par défaut. Et balancer 10000 lignes blanches, ça risque de prendre du temps.
Fabien LE LEZ
On Sun, 01 Jan 2006 12:03:57 +0100, James Kanze :
(mais il faudrait peut-être poser la question si, aujourd'hui, une GUI ne conviendrait pas mieux).
Si le programme est prévu pour qu'on y accède via SSH (ou autre Telnet), la ligne de commande peut se justifier. Cf "less" par exemple.
On Sun, 01 Jan 2006 12:03:57 +0100, James Kanze <kanze@none>:
(mais il faudrait peut-être poser la
question si, aujourd'hui, une GUI ne conviendrait pas mieux).
Si le programme est prévu pour qu'on y accède via SSH (ou autre
Telnet), la ligne de commande peut se justifier. Cf "less" par
exemple.