Forum Programmation.c++ cin.getline me cherche et me trouve

Posté par  .
Étiquettes : aucune
0
5
juil.
2004
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  . Évalué à 1.

    un \n qui traine dans stdin ? Essaye un while(getchar()!='\n'); entre les deux pour voir.
    • [^] # Re: Peut-être

      Posté par  (site web personnel) . Évalué à 2.

      ou avec un peut plus de 'chance' et vu qu'il utilise les classes cin/cout qui sont bufferisées un cin.flush() ou equivalent.
      • [^] # Re: Peut-être

        Posté par  . Évalué à 2.

        exact. std::cout est bufferisé en mode ligne, flush le avant tout lecture

        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  . Évalué à 0.

    Salut,
    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  . Évalué à 0.

      oui je recois bien les donnes depuis le clavier, et j'ai rajouter
      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  . Évalué à 1.

        non mais t'as rien compris ... le flush n'a aucun sens sur un flux d'entrée, d'ailleurs, tu dois bien déconner, puisque std::istream::flush n'est pas défini ...

        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  . Évalué à 0.

          si , j'avais compris pour le flush, vue que cin.flush() me provoquer une erreur, j'ai essaye cout.flush() qui lui a marche.

          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.