Partage
  • Partager sur Facebook
  • Partager sur Twitter

Résolution d'un mini problème en c++

erreur

Sujet résolu
    19 décembre 2022 à 9:00:05

    Bonjour,

    je voudrais créer une boucle qui demande à chaque fois de rentrer une valeur (pas plus d'une lettre) et la stocker respectivement dans un tableau 

    pour ça voici mon code : 

    #include <iostream>
    
    using namespace std;
    
    
    char mot[1000];
    int i = 0;
    
    
    int main()
    {
        for (i = 0; i < 10000; i++) {
            while(mot[i].length() != 1){
                cout << "Entrer a caractere : ";
                cin >> mot[i];
            }
        }
        
        return 0;
    }

    mais quand je compile ce code j'ai l'erreur suivante :

    error: request for member ‘length’ in ‘mot[i]’, which is of non-class type ‘char’

    Pouvez vous me proposer une solution et m'aidez 

    Merci d'avance 

    • Partager sur Facebook
    • Partager sur Twitter
      19 décembre 2022 à 9:52:42

      mot est un tableau de char, mot[i] est donc le char à l'index i de ce tableau

      Le message d'erreur est très clair, il n'existe pas de fonction length() associé au type char.

      J'imagine que tu veux tester que la saisie de l'utilisateur ne dépasse pas un charactère. Ce qu'il faudrait plutôt faire c'est de stocker la saisie utilisateur dans un std::string temporaire, tester la taille du string (ca sera size() plutôt que length()) et si la taille du string est de 1 alors tu peux faire quelque chose comme ça

      for (i = 0; i < 10000; i++) {
          std::string tempStr;
          while(tempStr.size() != 1){
              cout << "Entrer a caractere : ";
              cin >> tempStr;
          }
          mot[i] = tempStr[0];
      }

      Ici je ne te propose qu'une solution pour régler immédiatement ton problème de compilation, je ne parle pas du fond de ton code qu'il faudrait aussi revoir

      Tu as un tableau de 1000 char mais tu fais une boucle for sur 10 000, tu vas avoir des problèmes

      Tu utilises les vieux tableaux du C alors que le C++ as des structures de données bien plus intéressantes et faciles à manipuler comme std::array ou std::vector

      Tu utilises la directives using namespace std, bien que ça ne puisse pas poser de problème dans un petit code comme celui là, c'est une mauvaise habitude et il est bon de s'habituer à ne pas le faire même sur des petits codes de tests. Tu trouveras une tonne de post sur le forum expliquant en détail pourquoi c'est une mauvaise pratique 

      Est ce que tu fais ce code juste pour t'entrainer et apprendre le C++ ? Si oui tu n'as pas besoin de demander 1000 char, ça va juste être super long à tester tu peux t'entrainer avec des plus petites valeurs pour être sûr de facilement tester ton code jusqu'au bout de son exécution. Si il y a un vrai besoin dans un projet, peut-être que tu peux nous expliquer un peu plus le but ? C'est assez étrange de demander manuellement à l'utilisateur 1000 char un à un, il y a surement bien plus simples et pratiques à faire si tu nous expliques ce que tu veux faire 

      • Partager sur Facebook
      • Partager sur Twitter
        19 décembre 2022 à 10:34:10

        ThibaultVnt a écrit:

        mot est un tableau de char, mot[i] est donc le char à l'index i de ce tableau

        Le message d'erreur est très clair, il n'existe pas de fonction length() associé au type char.

        J'imagine que tu veux tester que la saisie de l'utilisateur ne dépasse pas un charactère. Ce qu'il faudrait plutôt faire c'est de stocker la saisie utilisateur dans un std::string temporaire, tester la taille du string (ca sera size() plutôt que length()) et si la taille du string est de 1 alors tu peux faire quelque chose comme ça

        for (i = 0; i < 10000; i++) {
            std::string tempStr;
            while(tempStr.size() != 1){
                cout << "Entrer a caractere : ";
                cin >> tempStr;
            }
            mot[i] = tempStr[0];
        }

        Ici je ne te propose qu'une solution pour régler immédiatement ton problème de compilation, je ne parle pas du fond de ton code qu'il faudrait aussi revoir

        Tu as un tableau de 1000 char mais tu fais une boucle for sur 10 000, tu vas avoir des problèmes

        Tu utilises les vieux tableaux du C alors que le C++ as des structures de données bien plus intéressantes et faciles à manipuler comme std::array ou std::vector

        Tu utilises la directives using namespace std, bien que ça ne puisse pas poser de problème dans un petit code comme celui là, c'est une mauvaise habitude et il est bon de s'habituer à ne pas le faire même sur des petits codes de tests. Tu trouveras une tonne de post sur le forum expliquant en détail pourquoi c'est une mauvaise pratique 

        Est ce que tu fais ce code juste pour t'entrainer et apprendre le C++ ? Si oui tu n'as pas besoin de demander 1000 char, ça va juste être super long à tester tu peux t'entrainer avec des plus petites valeurs pour être sûr de facilement tester ton code jusqu'au bout de son exécution. Si il y a un vrai besoin dans un projet, peut-être que tu peux nous expliquer un peu plus le but ? C'est assez étrange de demander manuellement à l'utilisateur 1000 char un à un, il y a surement bien plus simples et pratiques à faire si tu nous expliques ce que tu veux faire 

        MERCII ça finctione

        Merci pour ta réponse je prendrai en compte tes conseil pour le using namespace mais dommage pour moi je ne peux pas utiliser vector car c'est un projet de terminal et je n'est pas le droit d'utiliser les bibliothèque pour facilité la tahce comme vector ou list. 

        es ce que tu saurai par hasard comme je fait pour spécifier une touche qui permet d'arrêter la boucle genre une condition

        si j'entre la valeur '?':

              // fait un truck 

        sinon si j'entre la valeur '!' :

              // fait un truck 

        car j'essaye de faire un jeux qui s'appelle le quart de singe chaque joueurs doit donner un lettre pour compléter celle d'avant et de pouvoir trouver un mot donc si je clique sur ? ça va lui demander à quel mot tu pense le problème là est que je ne sais pas comment faire en sorte de comparer des char entre eux pour spécifier ? et !

        Merci 

        -
        Edité par AdelAchouche 19 décembre 2022 à 10:44:11

        • Partager sur Facebook
        • Partager sur Twitter
          19 décembre 2022 à 11:43:36

          Il y a un opérateur qui permet de faire la comparaison entre deux variables de même type

          Tu as déjà utilisé l'opérateur != dans le while, cet opérateur permet de tester que deux variables sont différentes. Si on veut tester que deux variables sont identiques, c'est l'opérateur == qui est utilisé 

          Après la boucle while, tu peux faire des blocs if / else if / else pour tester la valeur du caractère qui vient d'être entré. Tu peux aussi utiliser la structure switch case à la place d'un enchainement de if/else, ça se prête bien à ton cas et c'est plus élégant

          • Partager sur Facebook
          • Partager sur Twitter
            19 décembre 2022 à 17:27:22

            ThibaultVnt a écrit:

            Il y a un opérateur qui permet de faire la comparaison entre deux variables de même type

            Tu as déjà utilisé l'opérateur != dans le while, cet opérateur permet de tester que deux variables sont différentes. Si on veut tester que deux variables sont identiques, c'est l'opérateur == qui est utilisé 

            Après la boucle while, tu peux faire des blocs if / else if / else pour tester la valeur du caractère qui vient d'être entré. Tu peux aussi utiliser la structure switch case à la place d'un enchainement de if/else, ça se prête bien à ton cas et c'est plus élégant


            Merci beaucoup ça marche Impeccable :)
            • Partager sur Facebook
            • Partager sur Twitter

            Résolution d'un mini problème en c++

            × 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