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

  FORUM HardWare.fr
  Programmation
  C++

  Faire un flush en C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire un flush en C++

n°779105
monsieur t​omate
Posté le 26-06-2004 à 17:21:15  profilanswer
 

Salut,
 
J'ai un problème idiot, mais vu que je n'ai pas trouvé de solution sur google ni ici (la recherche efficace et moi, ça a toujours fait deux :sweat: ), j'expose mon problème ici.
 
J'ai deux variables de type string : editeur et console.
J'invite l'utilisateur à saisir ces deux chaines. Cependant, si l'éditeur est un mot séparé par un espace (exemple : "Ubi Soft" ), le programme retourne :
editeur = "Ubi"
console = "Soft"
Il saute donc la seconde saisie.
 
J'ai vu sur des forums des solutions du style :

Code :
  1. cout << "Message" << flush;
  2. cin.clear();
  3. cin >> truc;


 
mais ça n'a pas corrigé mon problème : j'ai été obligé de passer par un fflush(stdin) tel qu'on le ferait en C (et encore, cette méthode est déconseillée, je crois).
 
Ce qui donne donc :

Code :
  1. cout << "Entrez un editeur : \n";
  2. fflush(stdin);
  3. cin >> editeur;
  4. cout << "Entrez la nouvelle console : \n";
  5. fflush(stdin);
  6. cin >> console;


 
Quelqu'un pourrait-il me dire quelle serait la meilleure syntaxe pour rester dans une optique purement C++ ?


Message édité par monsieur tomate le 26-06-2004 à 20:10:51
mood
Publicité
Posté le 26-06-2004 à 17:21:15  profilanswer
 

n°779107
Taz
bisounours-codeur
Posté le 26-06-2004 à 17:26:14  profilanswer
 

1) ne mélange pas stdio et stream
 
2) std::flush fonctionne. ton cin.clear() est a priori inutile
 
3) un '\n' + suivi d'un flush -> le flush est inutile
 
4) il faut flusher entre tout cout non terminé par un '\n' et un cin
 
5) tu n'a pas de problème de flush. utilise std::getline(std::cin, a_std_string) qui lit une ligne

n°779119
monsieur t​omate
Posté le 26-06-2004 à 17:48:07  profilanswer
 

J'ai essayé :
 

Code :
  1. cout << "Entrez un editeur : \n";
  2. getline(cin,editeur);
  3.  
  4. cout << "Entrez la nouvelle console : \n";
  5. getline(cin,console);


 
Lorsque je ne fais que lire des chaînes, ça semble ok. Par contre, si je mélange des saisies avec des nombres (cin >> variable;) et des saisies avec des chaînes, le résultat est vraiment bizarre...
Pourtant, je respecte bien mes '\n' à la fin des cout... :o

n°779123
Taz
bisounours-codeur
Posté le 26-06-2004 à 17:52:15  profilanswer
 

ou mets des flush. et il n'y a rien de bizarre, tu dois juste merdoyer quelque part

n°779172
monsieur t​omate
Posté le 26-06-2004 à 18:56:17  profilanswer
 

J'ai refait quelques essais et j'y vois un peu plus clair :
quand je suis dans mon programme principal, ça marche impeccable.
Par contre, quand j'utilise ce morceau de code à l'intérieur de ma classe, ça bugge toujours.
 
Voici ce qui marche dans mon programme principal :

Code :
  1. string editeur;
  2. cout << "Entrez un editeur : " << endl;
  3. getline(cin,  editeur);


 
Dans ma classe, editeur est un membre protégé. Je recopie le même code (sans la déclaration string editeur bien sûr) dans une des méthodes et là, ça ne marche pas du tout...

n°779194
Taz
bisounours-codeur
Posté le 26-06-2004 à 19:25:10  profilanswer
 

c'est que tu foires ailleurs : note qu'endl == '\n' + flush alors si tu veux pas '\n', n'utilise que flush

n°779238
monsieur t​omate
Posté le 26-06-2004 à 20:01:47  profilanswer
 

wow, j'ai réussi !
 
En effet, le problème venait d'ailleurs :)
J'ai dû modifier une fonction permettant une saisie numérique :
 

Code :
  1. cin >> nb;
  2. cin.ignore();


 
J'ai rajouté le cin.ignore() et hop, ça carbure ! :pt1cable:  
 
Merci pour tes éclaircissements, en tout cas

n°779247
Taz
bisounours-codeur
Posté le 26-06-2004 à 20:05:35  profilanswer
 

écoute, plus tu rajoutes de choses sans comprendre plus tu accumules les merdes, certaines en annulant d'autres. si c'est le bordel sans ignore, c'est que quelque chose se passe mal sans que tu le saches. la programmation, c'est pas 'je bourre jusqu'à que ça passe sur mon test'
 
fais une recherche sur comment on lit proprement un entier, j'ai déjà collé des exemples de codes comme il faut.

n°779251
Taz
bisounours-codeur
Posté le 26-06-2004 à 20:07:11  profilanswer
 

non c'est pas résolu


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

  Faire un flush en C++

 

Sujets relatifs
[PHP] Header et ob_flushFlux : stringstream, à quoi sert le flush()
[C++] istream & flush 
Plus de sujets relatifs à : Faire un flush en C++


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