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 .
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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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
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.
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
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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent