Bonjour
J'essai de programmer en c++ et j'ai un probleme des plus enervants
, mon petit programme me pose une petite serie de question relative
a mes client comme le nom, prenom et 'addresse', qui ce compose de plusieur mot ex: 5 rue de la liberation, donc j'utilise a ce stade
--
cout << "Nom :";
cin >> nom;
cout << "Addresse : ";
cin.getline(addresse, sizeof(addresse));
etc...
--
tout ce passe bien jusqu'a ce que le programme arrive
a 'cout << "Addresse "; ' et passe directement a la suite sans me laisser le temp de repondre.
Le plus enervant dans tout ca c'est que ci j'essaie la meme chose
avec juste l'addresse a renseigner cela marche tres bien!
Ce qui a la dont de m'enerver grandement, car pour moi il n'y a aucune difference entre les deux cas et le fonctionnement devrais etre le meme.
Si quelqu'un a une reponse LOGIQUE a cela, please repond moi!
Je suis pres a recevoir la lumiere....(sa y'est mes plomb ont fondu)
a+
dans les deux cas!
# Peut-être
Posté par JaguarWan . Évalué à 1.
[^] # Re: Peut-être
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 2.
[^] # Re: Peut-être
Posté par TazForEver . Évalué à 2.
ET BORDEL, ARRETE les char* :o
std::istream&
std::getline(std::istream &, std::string &);
str::string ligne;
std::getline(std::cin, ligne);
non mais dit !
# Prise en compte
Posté par Sisyphe Plâtrier . Évalué à 0.
A priori, tu fais tes tests directement dans la console, pas en "paillepant" vers l'entrée standard, c'est bien ça ?
Eh bien, pour que ton "nom" soit pris en compte, tu as dû taper
un retour chariot, retour chariot qui n'a pas été consommé par
cin >> nom;
mais que le getline est censé "manger"
Donc l'explication logique est là.
Remède le plus propre : man istream.ignore(int,int) ;-)
Hope this helps.
[^] # Re: Prise en compte
Posté par ghostX . Évalué à 0.
cin.flush(); un peut partout( c.a.d apres chaque enregistrement d'une variable venant de l'entree standard )
et l'effet est tjs le meme .!
Loin de me decourager j'ai trouver les fonction scanf() et fgets()
qui n'ont pas eu plus d'effet.
A j'oublie ma variable 'addresse' n'est pas je les declarer comme ca:
char addresse[50]; (pas de * , mais je n'est pas encore teste ta facon ;-))
[^] # Re: Prise en compte
Posté par TazForEver . Évalué à 1.
le problème, c'est std::cout et tes char*. Fais des saisie propres ! et arrête de bricoler en rajoutant des instructions inutiles et insensé.
tu mets des std::cout.flush() entre chaque
std::cout << "sans \\n final" << std::flush;
std::getline(std::cin, ligne);
std::istream::ignore sert à lire des caractères sur un flux mais sans les stocker : en gros tu jètes
std::cin.ignore(std::numeric_limits::max(), '\n');
lira tout ce qu'il peut jusqu'à ce qu'il trouve un '\n'
mais attention, sur une erreur, il faudra remettre le flux en état avant.
[^] # Re: Prise en compte
Posté par ghostX . Évalué à 0.
De plus mon erreur venait du fait que les lignes anterieur etait recuperer par
cin >>..
Alors j'ai tout changer par
getline(cin, tampon)
et la plus d'erreur.( j'suis pa si mauvais finalement !)
Petite question vue l'enorme receblance entre le c et le c++ (dailleur je n'arrive pas bien a voir la difeerence entre les deux) lequel est le mieux. Ou quel est l'interré de programmer en c++ vue qu'en c il existe des os (hehe) qui demontre son potentiel evident.
Oui j'ai reffet le meme programme en c ( bon ok y avais plus de lignes)
et en utilisant sscanf et fgets j'ai reussie la ou j'ai eu des problemes
en c++.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.