Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur renvoi de char

    6 juillet 2018 à 10:24:41

    Bonjour à tous,

    voilà je débute dans le langage C, et j'ai un problème en essayant de créer une fonction qui renvoie un caractère à une variable, je vous envoie le code :

    void Choix_lettre(char lettre) //Choix de la lettre
    {
    	cout << "Choisissez une lettre : ";
    	cin >> lettre;
    
    	cout << "lettre choisie : " << lettre << endl;
    }
    
    
    
    void jouer()
    {
    	char lettre_choisie;
    	Choix_lettre(lettre_choisie);
    	cout << "La lettre que vous avez choisie est : " << lettre_choisie << endl;
    }
    

    Lors de l'exécution de ce script la variable 'lettre-choisie' n'affiche pas la lettre que je lui ai donnée dans la fonction Choix_lettre, et j'ai beau chercher je ne comprends pas mon erreur.

    Déjà là mon compilateur, me dit que la variable lettre_choisie n'a pas été initialisée alors qu'elle l'est théoriquement. Et si je lui ajoute un caractère tel que 'e' par exemple, cette valeur n'est pas modifiée par la fonction Choix_lettre.

    Si quelqu'un pouvait m'aiguiller ce sera super sympa :D.

    Voilà merci à tous!!

    -
    Edité par Cynesky 6 juillet 2018 à 10:27:09

    • Partager sur Facebook
    • Partager sur Twitter
      6 juillet 2018 à 10:46:21

      Hello,

      En c, les variables passées aux fonctions le sont par valeur, ce qui veut dire que si la variable lettre  reçoit bien la valeur de la variable lettre_choisie , ces deux variables n'ont rien à voir l'une avec l'autre. Elles possèdent chacune leur propre adresse mémoire. Ainsi, tu pouras assigner n'importe quelle valeur à lettre , lettre_choisie  n'en sera pas pour autant modifiée (d'où le message de ton compilateur).

      Pour modifier la variable lettre_choisie , tu as deux possibilités: soit passer l'adresse de lettre_choisie  à ta fonction (attendre d'avoir vu les pointeurs), soit tu assignes le retour de la fonction choix_valeur() à lettre_choisie .

      -
      Edité par edgarjacobs 6 juillet 2018 à 10:47:12

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        6 juillet 2018 à 10:47:47

        Cynesky a écrit:

        Bonjour à tous,

        voilà je débute dans le langage C, et j'ai un problème en essayant de créer une fonction qui renvoie un caractère à une variable, je vous envoie le code :

        void Choix_lettre(char lettre) //Choix de la lettre
        {
        	cout << "Choisissez une lettre : ";
        


        Edité par Cynesky il y a 9 minutes

        Tu débutes tellement que tu écris du C++ et pas du C.


        Le problème vient du passage de paramètres.  Quand on appelle une fonction comme ça en C (ou en C++), et qu'on lui donne des paramètres, ce qui est transmis à la fonction c'est la _valeur_ des paramètres, qu'ils viennent d'une variable ou d'une expression.

        Donc ici, quand tu appelles

        Choix_lettre(lettre_choisie);

        ce qui est transmis c'est la valeur du caractère  contenu dans la variable lettre_choisie. Mais le compilateur, qui est ton ami, te fait remarquer à juste titre que cette valeur n'a pas été initialisée. A juste titre (il a toujours raison de toutes façons).

        Dans la fonction, tu agis ensuite sur le paramètre lettre, une variable qui contient une _copie_ de la valeur reçue. Tu peux faire tout ce que tu veux à cette variable lettre, ça n'aura strictement aucun effet sur lettre_choisie de la fonction jouer.

        Voila pour les explications de ce qui se passe. Pour ce qu'il faudrait faire, il y a plusieurs solutions, mais si on est en C++, celle qui s'impose, c'est d'utiliser un passage de paramètre par référence


        void Choix_lettre(char & lettre)    // ici
        {
            cout << "Choisissez une lettre : ";
            cin >> lettre;
         
            cout << "lettre choisie : " << lettre << endl;
        }



        -
        Edité par michelbillaud 6 juillet 2018 à 10:49:00

        • Partager sur Facebook
        • Partager sur Twitter
          6 juillet 2018 à 11:08:31

          Bonjour,

          Merci de confirmer si tu travailles en C ou en C++ ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            10 juillet 2018 à 11:12:14

            Bonjour,

            tout d'abord merci de vos réponse à tous c'est beaucoup plus clair.

            Alors pour répondre à Benzouye, c'est un ami qui m'apprends, il m'apprends le C, mais me fait utiliser cin et cout parce que c'est plus simple que d'utiliser les fonctions scanf ou printf.

            En tout cas merci à tous. :)

            • Partager sur Facebook
            • Partager sur Twitter
              10 juillet 2018 à 13:15:39

              Donc il ne te fait pas faire du C.
              cin et cout sont du C++. Et printf/scanf ne sont pas plus compliqué que cin ou cout, simplement différents.

              • Partager sur Facebook
              • Partager sur Twitter
                10 juillet 2018 à 13:38:15

                ironwolf151 a écrit:

                cin et cout sont du C++. Et printf/scanf ne sont pas plus compliqué que cin ou cout, simplement différents.

                C est différent et plus compliqué. C++ se passe du spécificateur de format.

                -
                Edité par Marc Mongenet 10 juillet 2018 à 13:38:36

                • Partager sur Facebook
                • Partager sur Twitter
                  10 juillet 2018 à 15:52:04

                  Marc Mongenet a écrit:

                  ironwolf151 a écrit:

                  cin et cout sont du C++. Et printf/scanf ne sont pas plus compliqué que cin ou cout, simplement différents.

                  C est différent et plus compliqué. C++ se passe du spécificateur de format.

                  Ce qui rend très compliqué des actions aussi simples que de présenter des données en colonnes alignées correctement.

                  Et je ne parle pas (#prétérition) de colonnes de noms/prénoms contenant des lettres accentuées dans un environnement UTF-8..



                  -
                  Edité par michelbillaud 10 juillet 2018 à 15:54:29

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Erreur renvoi de char

                  × 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