IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Test sur un caractère entré au clavier besoin d'aide


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut Test sur un caractère entré au clavier besoin d'aide
    Bonsoir,
    J'ai codé cette fonction et elle me retourne toujours true (1) quelque soit le caractère entré...
    Auriez-vous l'amabilité de m'indiquer ce qui cloche?
    Merci et bonne soirée

    J-P

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    bool couleur_valide(char c)
    {
        if (c == '.' or c == 'R' or c == 'G' or c == 'B' or c =='C' or c == 'Y' or c == 'M')
        {
            bool couleur_valide = true;
        }
        else
        {
            bool couleur_valide = false;
        }
     
        cout<<c<<endl;
        cout<<couleur_valide<<endl;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    - or au lieu de ||, c'est pas commun mais admettons
    - fonction bool qui retourne rien
    - variable qui porte le nom de la fonction
    > et dont la portée est ridicule
    > ce qui la rend inutile
    Ce machin compile quelque part ? Faudrait voir à pas ignorer les warning.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Bonsoir,

    Je n'ai pas mis la variable retournée. Du moment que j'affiche la variable c et le booléen...
    Pour les or à la place des ||, c'est une déformation iussue de 40 années d'assembleur...

    Ça compile sans problème...et c'est bien là mon souci...
    Manifestement ma fonction contient une erreur puisqu'elle renvoie systématiquement true...

    Mais vos remarques m'ont aidé!

    Voici le code modifié et opérationnel...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    bool couleur_valide(char c)
    {
        bool couleur_valide(0);
     
        if (c == '.' || c == 'R' || c == 'G' || c == 'B' || c =='C' || c == 'Y' || c == 'M')
        {
            //bool couleur_valide = true;
            couleur_valide = true;
        }
        else
        {
            //bool couleur_valide = false;
            couleur_valide = false;
        }
            cout<<c<<endl;
            cout<<couleur_valide<<endl;
     
            return couleur_valide;
     
     
    }

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par debuteenc Voir le message
    Je n'ai pas mis la variable retournée.
    Ben oui, tout le problème est là...

    Tu indiquais explicitement au compilateur que ta fonction doit renvoyer une valeur qui ne peut être que true (la couleur est valide) ou false, mais tu ne demandais nulle part à ce qu'une de ces valeurs ne soit renvoyée.

    Et le compilateur te le faisait normalement savoir en émettant un avertissement du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: no return statement in function returning non-void [-Wreturn-type]
    Du moment que j'affiche la variable c et le booléen...
    Ben, non... ta fonction est sensée tester la validité du caractère qui lui est donné... Elle n'a absolument pas besoin de l'afficher, en raison du principe de la responsabilité unique : tout type de donnée, toute donnée, toute fonction ne doit servir qu'à une seule chose, afin de pouvoir le faire correctement

    Si tu veux absolument afficher le résultat, ca doit se faire "ailleurs" (sans doute lorsque tu as le résultat de la vérification ).

    Et c'est d'autant plus vrai que l'on ignore complètement, au niveau de ta fonction couleur_valide, d'où vient le caractère qui doit être testé.

    Pour l'instant, tu sembles récupérer le caractère à partir du clavier, et l'affichage ne va donc se faire qu'après qu'il y ait eu une intervention explicite de la part de l'utilisateur de ton programme, et donc, il pourrait n'avoir lieu qu'une seule et unique fois.

    Seulement, le caractère testé pourrait tout aussi bien venir "d'ailleurs", comme par exemple:
    • d'un fichier contenant 3 000 000 de caractères (chaque caractère devant être testé)
    • d'un serveur envoyant les caractères un à un
    • d'un port série sur lequel on récupère les données envoyées (toutes les millisecondes) par un appareil de mesure quelconque
    • j'en passe, et sans doute de meilleures

    On peut donc très facilement imaginer une situation dans laquelle cette fonction serait appelée "un grand nombre" de fois très rapidement ce qui provoquerait un grand nombre d'affichages se suivant très rapidement.

    Et l'affichage pourrait alors très rapidement devenir une gène plus qu'autre chose, ne serait-ce que à cause du temps nécessaire pour qu'il s'exécute et, surtout, parce qu'il pourrait "très rapidement" devenir très compliqué de retrouver l'affichage d'un caractère particulier parmi les milliers voir les millions de caractères qui ont été testés
    Citation Envoyé par debuteenc Voir le message
    Pour les or à la place des ||, c'est une déformation iussue de 40 années d'assembleur...
    Oui, effectivement, cela fonctionne... Mais pas exactement de la manière que l'on espère

    Il faut en effet savoir qu'il y a une différence de taille entre le mot clé or et l'opérateur || dans le sens où, alors que le mot clé or représente une disjonction en algèbre de bool, l'opérateur || est ce que l'on appelle un "opérateur optimisé": si l'on a l'expression condition_1 || condition_2 la condition_2 ne sera testée que si sa valeur a encore une chance de changer la valeur finale de l'expression. Dans le cas présent, si condition_1 donne déjà un résultat égal à true condition_2 ne sera donc pas testée, car le résultat ne pourra plus changer quoi qu'il arrive.

    Ce n'est pas le cas du mot clé or (ou de l'opérateur équivalent |), qui applique littéralement une disjonction booléenne et qui va donc tester l'expression dans son ensemble avant de fournir un résultat final.

    Citation Envoyé par debuteenc Voir le message
    Ça compile sans problème...et c'est bien là mon souci...
    oui, mais l'avertissement t'indique clairement qu'il n'y a aucune instruction return pour une fonction qui est sensée renvoyer un booléen... Dés lors, la question est: d'où vient la valeur que tu récupères

    En fait, on se trouve typiquement dans un cas de comportement indéfini (undefined behaviour): un comportement pour lequel il n'y a pas de "bonne réponse générale" et qui est laissé à l'appréciation des développeurs du compilateur.

    Il semblerait que l'équipe qui a développé le compilateur que tu utilises ait choisi de considérer que la valeur dans ce cas là serait équivalente à true... L'équipe qui a développé un autre compilateur peut très bien avoir décidé que cette situation serait équivalente à false
    Citation Envoyé par debuteenc Voir le message
    Manifestement ma fonction contient une erreur puisqu'elle renvoie systématiquement true...
    Et oui, en effet...

    Et le compilateur l'a d'ailleurs remarqué, même si cette erreur ne justifiait pas d'arrêter la compilation.

    Tu viens donc d'apprendre un point capital: une compilation réussie ne signifie absolument pas qu'il n'y a aucune erreur de logique. Cela signifie uniquement que le code est valide dans le sens où il respecte la syntaxe et la grammaire du langage.

    Par chance, il existe une liste longue comme le bras de situations dans lesquelles le compilateur est capable de se rendre compte qu'un code valide risque malgré tout de poser problème sans forcément devoir arrêter la compilation (parce que le compilateur n'a aucun moyen de savoir si le "problème" rencontré vient d'une "distraction" ou d'une volonté claire et justifiée de la part du codeur. Par chance, quand le compilateur va systématiquement indiquer qu'il a rencontré un "éventuel problème". Et l'on est généralement "bien inspiré" d'en tenir compte afin -- le cas échéant -- de trouver le moyen de corriger ce problème potentiel
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Merci beaucoup pour ces infos. Relativement à l'affichage il ne sert qu'au "debuggage". Une grosse erreur était de déclarer 2 fois la variable bool...
    Avec ces corrections le programme fonctionne parfaitement. Grâce à vous, je serai, désormais plus attentif aux messages du compilateur!

    Je tiens à saluer votre sérieux, votre disponibilité et votre diligence

    Bonne semaine

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par debuteenc Voir le message
    Merci beaucoup pour ces infos. Relativement à l'affichage il ne sert qu'au "debuggage".
    J'en ai bien conscience, mais tu peux te dire que ce n'est pas une bonne idée...

    Si tu dois débugger un programme, tu as largement intérêt à utiliser les outils prévus pour (comme ... le débuggeur, par exemple) qui te permettra -- a priori -- bien mieux de savoir quelle valeur a été utilisée à quel moment et, surtout, la manière dont elle a été obtenue

    N'oublie en outre jamais que, bien souvent, le moment où l'erreur devient "visible" parce qu'on utilise une valeur incorrecte est souvent très loin du moment où cette valeur a été définie et que c'est le moment de la définition de la valeur qui t'intéresse le plus: comment se fait il que la valeur que tu vas utiliser "plus tard" ne corresponde pas à la valeur à laquelle tu devrais pouvoir t'attendre
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    C'est surtout que tu n'as pas compris la notion de bloc en C/ C++. 1 bloc est entre accolades {}
    Et donc, toute variable définie dans 1 bloc, sera détruite à la fin du bloc (visibilité)
    C'est 1 truc à connaître/ maîtriser pour par exemple, définir des variables temporaires dans 1 switch ou n'importe où.

    C'est pour cela que ton compilateur te disais que tu avais 2 variables non utilisées. Tu sais lire les warnings ?

    Par contre, que ta variable est le même nom de ta fonction, cela ne semble pas gêner le compilateur (sauf lorsque tes variables ne sont plus visibles, et qu'il prend l'adresse de la fonction)
    Tu le verras plus tard, mais le nom d'1 tableau et d'1 fonction/ procédure, c'est aussi 1 adresse/ pointeur.

  8. #8
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    688
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 688
    Par défaut
    Salut,

    Citation Envoyé par koala01 Voir le message
    Il faut en effet savoir qu'il y a une différence de taille entre le mot clé or et l'opérateur || dans le sens où, alors que le mot clé or représente une disjonction en algèbre de bool, l'opérateur || est ce que l'on appelle un "opérateur optimisé": si l'on a l'expression condition_1 || condition_2 la condition_2 ne sera testée que si sa valeur a encore une chance de changer la valeur finale de l'expression. Dans le cas présent, si condition_1 donne déjà un résultat égal à true condition_2 ne sera donc pas testée, car le résultat ne pourra plus changer quoi qu'il arrive.

    Ce n'est pas le cas du mot clé or (ou de l'opérateur équivalent |), qui applique littéralement une disjonction booléenne et qui va donc tester l'expression dans son ensemble avant de fournir un résultat final.
    Juste pour dire que tout ce que tu as écrit là est erroné. Comme foetus ne l'a pas dit alors je te le dis.
    Mais plaisanterie à part, or correspond bien à ||, par contre ce qui correspond à | c'est bitor.

  9. #9
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Mais plaisanterie à part, or correspond bien à ||, par contre ce qui correspond à | c'est bitor.
    Il faut donner l'entête : iso646.h en C/ ciso646 en C++ (<- lien cplusplus.com en anglais)

    Mais @koala01 a raison de rappeler qu'il existe des opérateurs logiques (!, ||, &&) et des opérateurs binaires (~, |, &, ^ (XOR, le sheriff de l'espace), <<, >>).
    Cela évite quelques surprises


    Édit : suite à la remarque ci-dessous de @kaitlyn, effectivement en C++ et c'est noté dans mon lien, les mots sont réservés et donc l'inclusion ne fait rien.

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Oups!
    Merci pour ces précieuses infos...
    Je constate que le cours suivi n'est pas vraiment en adéquation avec les exercices proposés!
    De plus, je ne sais pas utiliser le debugger...contrairement à celui que j'utilise pour Arduino. partant, je vais aller regarder sur Youtube si je trouve des tutoriels. J'utilise Codeblocks, est-ce un bon plan?
    Je vais travailler encore sur l'exercice à rendre et, si je sèche trop longtemps, je reviendrai vers vous.

    Bonne journée

  11. #11
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    688
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 688
    Par défaut
    Citation Envoyé par foetus Voir le message
    Il faut donner l'entête : iso646.h en C/ ciso646 en C++ (<- lien cplusplus.com en anglais)
    On attendait sur toi. Par contre il n'y a pas besoin d'inclusion en C++, ces opérateurs alternatifs font partie du langage.

    Citation Envoyé par foetus Voir le message
    Mais @koala01 a raison de rappeler qu'il existe des opérateurs logiques (!, ||, &&) et des opérateurs binaires
    Oui mais l'information était erronée et debuteenc avait correctement utilisé "or". Pour les opérations binaires, elles sont peut-être dans une prochaine leçon.

    @debuteenc

    CodeBlock est très bien. Aussi il ne faut pas espérer "apprendre tout" en un instant, c'est progressif. C++ n'est pas un langage facile et la courbe d'apprentissage n'est pas pareille pour tout le monde. l'essentiel est d'avancer. Un bon livre aide. Regarde dans la rubrique concernée et le forum pour les questions à ce sujet.

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Merci pour vos conseils et encouragements! Comme bouquin sur le C++, j'ai celui de Claude delannoy...

    Relativement à la portée des variables, j'ai déclarer plusieurs de celles-ci (c1, c2, c3 et c4) en dehors de toutes les fonctions. Car je compte utiliser lesdites variables dans plusieurs fonctions.
    Je compile le code, sans erreurs! Mais, si je veux simplement afficher une de ces variables en dehors de la fonction...

    ||=== Build file: "no target" in "no project" (compiler: unknown) ===|
    C:\Users\BFI-Rife\Documents\C++\Exemple.cc||In function 'void jouer()'
    C:\Users\BFI-Rife\Documents\C++\Exemple.cc|114|error: 'c1' was not declared in this scope|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    Qu'est-ce qui cloche?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    include <iostream>
    #include <ctime>
     
    // pour les nombres aléatoires
    #include <random>
    #include <cstring> // strlen
     
    using namespace std;
     
     
    // ======================================================================
    char poser_question()
    {
      char lu(' ');
      cout << "Entrez une couleur : ";
      cin >> lu;
      return lu;
    }
     
    // ---- prototype -------------------------------------------------------
    bool couleur_valide(char c);
     
    // ======================================================================
    char lire_couleur()
    {
      char lu(poser_question());
      while (not couleur_valide(lu))
        {
          cout << "'" << lu << "' n'est pas une couleur valide." << endl;
          cout << "Les couleurs possibles sont : ., R, G, B, C, Y ou M." << endl;
        lu = poser_question();
        }
      return lu;
    }
     
    // ======================================================================
    void afficher_couleurs(char c1, char c2, char c3, char c4)
    {
      cout << ' ' << c1 << ' ' << c2 << ' ' << c3 << ' ' << c4;
    }
     
     
    // ---- prototype -------------------------------------------------------
    void afficher_reponses(char c1, char c2, char c3, char c4,
                           char r1, char r2, char r3, char r4);
     
    // ======================================================================
    void afficher_coup(char c1, char c2, char c3, char c4,
                       char r1, char r2, char r3, char r4)
    {
      afficher_couleurs(c1, c2, c3, c4);
      cout << " : ";
      afficher_reponses(c1, c2, c3, c4,
                        r1, r2, r3, r4);
      cout << endl;
    }
     
     
    /*****************************************************
     * Compléter le code à partir d'ici
     *****************************************************/
     
    // ======================================================================
    bool couleur_valide(char c)
    {
        if (c == '.' || c == 'R' || c == 'G' || c == 'B' || c =='C' || c == 'Y' || c == 'M')
          {
            return true;
          }
        else
          {
            return false;
          }
    }
     
     
    // ======================================================================
    void afficher_reponses(char c1, char c2, char c3, char c4,
                           char r1, char r2, char r3, char r4)
    {
    }
     
    // ======================================================================
    void jouer()
    {
        while(0)
        {
          /*     Lecture des 4 couleurs entrées par le joueur*/
     
         for (int i=0;i<4;i++)         //lire et stocker les 4 propositions de couleur du joueur
          {
             char c (lire_couleur());  //fonction donnée qui consiste à demander au joueur d'entrer une couleur parmi celles autorisées
     
                if (i==0)
                {
                  char c1=c;           // stocke la première couleur dans c1
                }
     
                if (i==1)
                {
                  char c2=c;
                }
     
                if (i==2)
                {
                  char c3=c;
                }
                if (i==3)
                {
                  char c4=c;
                }
          }
     
          cout<<c1<<endl;
        }
     
     
     
    }
     
    char c1(' '), c2(' '), c3(' '), c4 (' '); //Déclaration globale des variables utilisées dans les différentes fonctions
     
     
    /*******************************************
     * Ne rien modifier après cette ligne.
     *******************************************/
     
    int main()
    {
      jouer();
      return 0;
    }

  13. #13
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Tu es dur de la feuille Blocs, lien developpez

    une variable définie dans un bloc est locale à ce bloc et donc inconnue à l'extérieur.

    Tu sais lire l'anglais ? "scope", c'est la portée. 1 terme ultra générique en programmation.

  14. #14
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Ceci, je l'ai compris! J'ai déclaré les variables en dehors de toute procédure, mais rien y fait!

    Comment faire, alors, pour utiliser des variables traitées dans une fonction, hors de cette fonction?

  15. #15
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Pour te répondre, parce que tes variables globales sont définies après.

    Mais va lire tes tutoriaux, parce que c'est la base du C/ C++ : les blocs, la visibilité, la notion de extern et de static, les déclarations anticipées avancées ("forward declarations" en anglais) ...

    Ton code c'est n'importe quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    char c1(' '), c2(' '), c3(' '), c4 (' '); // variables globales
     
    void jouer() {
        while(0) {
            for (int i=0;i<4;i++) { // définition de la variable locale i
                char c (lire_couleur());  // définition de la variable locale c
     
                if (i == 0) {
                  char c1=c; // définition de c1 qui masque c1 la variable globale
                } // destruction de c1 locale
     
                if (i == 1) {
                  char c2=c; // définition de c2 qui masque c2 la variable globale
                } // destruction de c2 locale
     
                if (i == 2) {
                  char c3=c; // définition de c3 qui masque c3 la variable globale
                } // destruction de c3 locale
     
                if (i == 4) {
                  char c4=c; // définition de c4 qui masque c4 la variable globale
                } // destruction de c4 locale
            } // destruction de la variable locale c. c n'est visible que dans le for
              // destruction de la variable locale i. i n'est visible que dans le for
     
            cout<<c1<<endl; // c1, variable globale
        }
    }

  16. #16
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    688
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 688
    Par défaut
    Citation Envoyé par debuteenc Voir le message
    Merci pour vos conseils et encouragements! Comme bouquin sur le C++, j'ai celui de Claude delannoy
    D'après les avis* que j'ai pu lire sur ce même forum à propos de ses livres, tout au moins C++, il en ressort que même les cheminées n'en veulent pas. Ceci explique peut-être cette question "bizarre" que tu poses où la réaction de foetus ne se fait pas attendre . Attention tout de même, les mauvaises habitudes ont la vie dure.

    (*):
    https://www.developpez.net/forums/d1...aude-delannoy/
    https://www.developpez.net/forums/d9...its-problemes/
    https://www.developpez.net/forums/d1...oche-19-octob/


    P.-S. Est-ce que le code dans ce -> message provient du livre en question ? Quel est son titre ? Son édition ?

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Relativement au livre, mon livre n'est pas celui de Delannoy (livre sur le C que l'on m'a donné), mais celui de Nebra et Schaller. Le code qui est à ma disposition, et que je dois modifier afin de construire d'autres procédures, provient d'un cours dispensé par une grande école. L'inconvénient majeur de celui-ci est que, premièrement, l'adéquation entre le niveau des exercices à rendre et le niveau du cours lui-même reste à démontrer. Deuxièmement, vous êtes seul devant votre écran et, personne à qui poser vos questions. Partant, pas de réponses auxdites questions! Les exercices sont envoyés à un correcteur informatique qui vous distille, des messages, pour le moins alambiqués.

    Ceci dit, avec les infos que vous m'avez si gentiment données, j'ai pu terminer mon exercice et je vous en remercie grandement!

    Si cela intéresse, l'un d'entre-vous, je puis lui envoyer par message le libellé de l'exercice.

    Bonne après-midi

    J-P

  18. #18
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par debuteenc Voir le message
    Relativement au livre, mon livre n'est pas celui de Delannoy (livre sur le C que l'on m'a donné), mais celui de Nebra et Schaller.
    Ouaip.. Bon... le bouquin dont tu parle n'est vraiment pas mieux :$
    provient d'un cours dispensé par une grande école.
    Non, même pas...

    Ce bouquin n'est que la version papier d'un "cours" écrit il y a près de quinze ans (si pas plus) par quelqu'un qui n'avait en fait rien compris au C++, disponible en ligne sur un site concurrent (dont je tairai le nom) et qui est au moins aussi unanimement décrié que le Delannoy...
    L'inconvénient majeur de celui-ci est que, premièrement, l'adéquation entre le niveau des exercices à rendre et le niveau du cours lui-même reste à démontrer.
    Même pas... Son principal inconvénient est d'être bourré d'erreurs.

    Ex-aequo avec le fait d'aborder le C++ d'une manière que l'on essaye de combattre depuis ... ben bien avant la sortie du livre en fait...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  19. #19
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    ...Merci, pour la référence du bouquin! A la lecture de celui de de Schaller, j'ai vite un sentiment de blabla inutile...Enfin, le cours que je suis est bien un cours dispensé dans une grande école. Chaque semaine je dois rendre des exercices...Et, à la fin si j'ai obtenu suffisamment de points je reçois un certificat...Bon, à 67 ans...le certif...Cependant, je veux finir le cours!

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire les caractères entrés au clavier au fur et à mesure
    Par Decon dans le forum Général Java
    Réponses: 9
    Dernier message: 07/05/2010, 13h19
  2. Test d'un caractére entré au clavier.
    Par beware dans le forum Débuter
    Réponses: 5
    Dernier message: 06/03/2009, 19h25
  3. Réponses: 2
    Dernier message: 17/10/2007, 13h15
  4. [BO XIr2] Tests sur des différences entre dates
    Par Enthau dans le forum Deski
    Réponses: 4
    Dernier message: 27/07/2007, 10h49
  5. [Debutant] test sur un caractère
    Par Scorff dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/06/2005, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo