Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec \n

Boucle pour trouver la longueur d'une chaine

Sujet résolu
    28 mai 2008 à 0:52:04

    Bonjour,

    J'essaie de faire des exercices disponibles sur d'autre sites, mais j'ai trouvé un problème par rapport au C++. J'ai essayé de compiler presque le même code en C et cela fonctionne.

    Voici le code :
    int main()
    {
        char charactereLu = ' ';
        int nombreChar = 0;
    
        while (charactereLu != '\n')
        {
            cin >> charactereLu;
            nombreChar++;
        }
    
        cout << nombreChar;
    
    
    
       return 0;
    }
    


    En C, la boucle arrête, tandis qu'en C++ elle est infinie. On dirait que le C++ ne reconnait pas le caractère \n, je trouve cela bizarre.

    J'aimerais bien trouver une solution et ne pas abandonner là.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2008 à 0:56:22

      Bonsoir,

      En C il n'y a pas de cin donc cela m'étonnerait que tu aies réussi à compiler ce code en C :)
      • Partager sur Facebook
      • Partager sur Twitter
      Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
        28 mai 2008 à 0:57:12

        C'est pour cela que j'ai signaler que j'avais compiler PRESQUE le même code ;)
        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2008 à 1:06:50

          Tu aurais dû en déduire que les entrées-sorties en C n'ont pas exactement le même comportement que les entrées-sorties en C++.
          Il est un peu tard là, mais je suis certain qu'il y ait une explication logique à tout ça, il suffit de fouiller un peu dans les docs...
          En fait je crois qu'en réfléchissant un peu j'ai trouvé l'explication. Tu es en train d'essayer de saisir un caractère (char) avec cin, cin doit attendre un caractère "normal" et non pas un caractère de séparation. Si cin rencontre un caractère de sépération tel que '\n', il laisse le caractère dans le buffer. Si de plus la saisie est dans une boucle, elle devient infinie car le caractère '\n' n'a pas été affecté à ta variable et est toujours présent dans le buffer.
          • Partager sur Facebook
          • Partager sur Twitter
          Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
            28 mai 2008 à 1:13:35

            getline() lit dans le flux jusqu'au prochain "\n". Donc...
            #include <string>
            #include <iostream>
            
            int main()
            {
                std::string ligne;
                std::getline(std::cin, ligne);
                std::cout << "Nombre de caracteres: " << ligne.length();
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              28 mai 2008 à 1:15:29

              Merci beaucoup à vous deux!
              • Partager sur Facebook
              • Partager sur Twitter

              Problème avec \n

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown