Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question(s) en C..

.. et peut-être plus tard C++

    23 janvier 2006 à 14:13:31

    'jour à tous !!!

    Alors voilà, suite au début de la lecture d'un chapitre de C j'ai essayé de coder un petit programme mais le résultat est incorrect !!!

    Voilà mon programme :


    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
     
    unsigned char op1 = 0;
    unsigned char op2 = 0;
    unsigned char rep = 0;
    printf("Bonjour à toi !!! A + B = C > A = ");
    scanf("%ld",&op1);

    printf("Okii et B = ");
    scanf("%ld",&op2);

    rep = op1 + op2;

    printf("C = %ld \n\n ",rep);

      system("PAUSE");     
      return 0;
    }


    Qui est en C.. Si vous pouviez m'éclaircir un peu ce serait gentil de votre part.

    ++
    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2006 à 14:51:02

      char c'est certes un type numérique entier, mais on s'en sert pour les caractères généralement. C'est probablement ce qui pose problème dans ton code ; de toutes façons, ce n'est pas clair du tout.
      Si tu tiens à ta mémoire (et que tu es conscient d'être très limité en taille), fais plutôt des unsigned short int.
      Pas besoin d'initialiser les variables à leur déclaration.

      Et euh, fais correspondre les types dans les chaines formatés de tes scanf, mettre quelque chose qui ne correspond pas _peut_ marcher, mais c'est très moche (http://casteyde.christian.free.fr/cpp/cours/online/x813.html#AEN875 ; %hu pour un unsigned short donc)
      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2006 à 16:30:17

        Salut Elentar.

        Tout d'abord merci de ta réponse.. mais la réponse du char est pour moi un peu bizzare ^^

        J'aurai compris si char était fait juste pour les caractères et que l'on ne peut pas s'en servire en tant qu'entier mais après avoir codé à la va-vite un code, char peut renvoyer un entier :


        #include <stdio.h>
        #include <stdlib.h>

        int main(int argc, char *argv[])
        {
         
        unsigned char test = 49;

        printf("Test = %ld \n\n ",test);

          system("PAUSE");     
          return 0;
        }


        Est-ce que le ... char peut s'appliquer pour les pritf peut renvoyer une valeur entière etc. MAIS NE PEUT PAS ETRE UTILISE POUR INTERAGIR AVEC L'UTILISATEUR ?

        Merci et ++
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2006 à 16:49:21

          char c'est un nombre entier, on peut faire toutes les opérations que l'on veut dessus, comme un int.
          Seulement, l'utiliser comme un simple nombre entier est :
          1/ moche (rend le code plus difficile à comprendre)
          2/ peut poser des problèmes, comme vu dans ton premier code.

          Tes problèmes viennent des scanf/printf.
          Et pour un unsigned char (%uc, on n'utilise pas %ld partout sans chercher à comprendre (cf. lien ci-dessus)), une table de conversion peut être utilisée (par exemple l'ASCII), ce qui est le cas sur mon x86/Windows, ce qui ne donne pas du tout le résultat attendu.

          Après, avec d'autres fonctions de i/o (et/ou en bicolant), on peut certainement faire un truc portable et qui marche avec le type char, mais enfin... quel est l'intérêt de se borner à ça ?
          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2006 à 11:02:15

            Ok thanks de ta réponse et un unsigned short int prend combien de mémoire ? Et un short int ?

            -> Quelle est la différence si l'on met les prototypes de fonctions dans un .c au début ou si l'on met les prototypes dans un header .h inclu par les directives de préprocesseur ?

            -> Les librairies comme stdio.h sont en .h pourtant les .h sont les proto. de fonctions non ? Alors les headers peuvent-ils servir à autre chose que les prototypes de fonctions ?

            Merci D'AVANCE de VOS réponses et @+
            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2006 à 12:57:37

              Il n'y a pas de norme pour la taille des types. Mais généralement, short int (signed/unsigned ne change pas la taille) prend 2 octets.

              1/ Aucune, sauf qu'on tend à mettre dans des fichiers séparés par clareté, surtout lorsqu'on commence à avoir un 'gros' programme.
              2/ Non, c'est beaucoup plus compliqué que ça.

              Déjà il ne faut bien comprendre que les headers sont simplement les fichiers qui viennent en début de programme, rien de plus.

              Les headers peuvent avoir diverses utilités, les prototypes n'en sont qu'un exemple.

              Les headers de la bibliothèque standard (stdlib.h, stdio.h, etc.) contiennent principalement des déclarations de types, de variables, de constantes, et des protypes de fonctions (les déclarations de ces fonctions sont dans des fichiers déjà compilés, présents dans /lib du compilateur).

              Faut aussi dire qu'il y a pas mal de commandes du préprocesseur (lignes commençant par #), dans le cours à Mateo on a vu seulement #include pour l'instant je crois...
              • Partager sur Facebook
              • Partager sur Twitter

              Question(s) 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