Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit problème en C

Sujet résolu
    22 avril 2006 à 22:21:20

    Bonjour !
    Voici mon tout premier code en C :

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

    int main(int argc, char *argv[])
    {
      printf("*/CALCULATRICE\*\n\nQuel calcul voulez-vous faire ?\n\n1.Addition\n2.Soustraction\n3.Multiplication\n4.Division\n\n");
      char choix = 0;
      char nbr1 = 0;
      char nbr2 = 0;
      char resultat = 0;
      scanf("%ld", &choix);
      switch(choix)
      {
            case 1:
                 printf("Les deux termes de votre addition :\n");
                 scanf("%ld", &nbr1);
                 printf("\n");
                 scanf("%ld", &nbr2);
                 resultat = nbr1 + nbr2;
                 printf("%ld + %ld = %ld\n", nbr1, nbr2, resultat);
                 break;
            case 2:
                 printf("Les deux termes de votre soustraction :\n");
                 scanf("%ld", &nbr1);
                 printf("\n");
                 scanf("%ld", &nbr2);
                 resultat = nbr1 - nbr2;
                 printf("%ld - %ld = %ld\n", nbr1, nbr2, resultat);
                 break;
            case 3:
                 printf("Les deux facteurs de votre multiplication :\n");
                 scanf("%ld", &nbr1);
                 printf("\n");
                 scanf("%ld", &nbr2);
                 resultat = nbr1 * nbr2;
                 printf("%ld X %ld = %ld\n", nbr1, nbr2, resultat);
                 break;
            case 4:
                 printf("Le dividende et le diviseur de votre division :\n");
                 scanf("%ld", &nbr1);
                 printf("\n");
                 scanf("%ld", &nbr2);
                 resultat = nbr1 / nbr2;
                 printf("%ld / %ld = %ld\n", nbr1, nbr2, resultat);
                 break;
            default:
                 printf("Le numero que vous demandez n'est pas attribue, veuillez contacter le service des renseignements\n\n");
      }
      system("PAUSE");     
      return 0;
    }


    Le problème est que le nombre 1 est toujours égal à 0 et je ne comprends pas pourquoi... Quelqu'un pourrait m'expliquer svp ?
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2006 à 22:23:47

      Merci d'utiliser la balise "code" pour mettre en forme les codes, comme expliqué dans ce post-it :
      http://www.siteduzero.com/forum-83-6661-regles-de-ce-forum.html

      Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

      Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

      Citation : Pas de titre

      int main(int argc, char *argv[])
      {
      long choixOperation;

      printf("Choisissez l'operation a effectuer \n\n");
      /* etc. */
      }



      Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

      int main(int argc, char *argv[])
      {
          long choixOperation;

          printf("Choisissez l'operation a effectuer \n\n");
          /* etc. */
      }


      C'est plus clair n'est-ce pas ? :)
      N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.


      [Ceci est une réponse semi-automatique]
      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2006 à 22:26:25

        Et plus sérieusement, utilises des int pour tes nombres en les lisants avec un %d. Ou des long int avec un %ld, mais pas un char avec un %ld.
        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2006 à 22:59:02

          Désolé pour le code, je n'avais pas vu que l'on pouvait le colorer... Je l'ai édité ;) Maintentant je saurrai :D
          Je vais mettre des int en les lisant avec des %d alors...
          Edit : C'est bon, cela a corriger le problème (les int et %d) ;)
          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2006 à 23:34:30

            Citation : Groovy

            Voici mon tout premier code en C :


            Atttention à la division. Elle est entière (ok, pourquoi pas). Elle accepte la division par 0. Caymal.

              printf("*/CALCULATRICE\*\n\nQuel calcul voulez-vous faire ?\n\n1.Addition\n2.Soustraction\n3.Multiplication\n4.Division\n\n");

            La séquence "\*" n'existe pas. Tu veux sans doute dire "\\*"
            Eviter les lignes de plus de 80 colonnes.

              char choix = 0;

              scanf("%ld", &choix);

            "%ld" attend l'adresse d'un long. Au fait, un int suffit ("%d").

            D'autre part, comme dans 99% des cas, scanf() est ici mal utilisé. C'est une fonction difficile que même la plupart des programmeurs expérimentés ne maîtrisent pas. C'est pourquoi pour toutes les entrées, je recommande l'usage exclusif de fgets() et de la fonction de conversion qui va bien.

            Tout est là :

            http://mapage.noos.fr/emdel/notes.htm#saisie
            http://mapage.noos.fr/emdel/notes.htm#fichiers

            Pose des questions si tu ne comprends pas.

            Sinon, ça marche pas mal. Sauras-tu trouver ce que j'ai ajouté pour obtenir ceci ?

            */CALCULATRICE\*

            Quel calcul voulez-vous faire ?

            1.Addition
            2.Soustraction
            3.Multiplication
            4.Division
            9.Quitter

            1
            Les deux termes de votre addition :
            12 34

            12 + 34 = 46
            Quel calcul voulez-vous faire ?

            1.Addition
            2.Soustraction
            3.Multiplication
            4.Division
            9.Quitter

            2
            Les deux termes de votre soustraction :
            12 34

            12 - 34 = -22
            Quel calcul voulez-vous faire ?

            1.Addition
            2.Soustraction
            3.Multiplication
            4.Division
            9.Quitter

            3
            Les deux facteurs de votre multiplication :
            12 34

            12 X 34 = 408
            Quel calcul voulez-vous faire ?

            1.Addition
            2.Soustraction
            3.Multiplication
            4.Division
            9.Quitter

            4
            Le dividende et le diviseur de votre division :
            12 34

            12 / 34 = 0
            Quel calcul voulez-vous faire ?

            1.Addition
            2.Soustraction
            3.Multiplication
            4.Division
            9.Quitter

            9

            Secret (cliquez pour afficher)

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

            int main(int argc, char *argv[])
            {
               int fin = 0;
               printf("*/CALCULATRICE\\*\n\n");
               while (!fin)
               {
                  printf("Quel calcul voulez-vous faire ?\n\n"
                         "1.Addition\n"
                         "2.Soustraction\n"
                         "3.Multiplication\n"
                         "4.Division\n"
                         "9.Quitter\n"
                         "\n");
                  int choix = 0;
                  long nbr1 = 0;
                  long nbr2 = 0;
                  long resultat = 0;
                  scanf("%ld", &choix);
                  switch (choix)
                  {
                  case 1:
                     printf("Les deux termes de votre addition :\n");
                     scanf("%ld", &nbr1);
                     printf("\n");
                     scanf("%ld", &nbr2);
                     resultat = nbr1 + nbr2;
                     printf("%ld + %ld = %ld\n", nbr1, nbr2, resultat);
                     break;
                  case 2:
                     printf("Les deux termes de votre soustraction :\n");
                     scanf("%ld", &nbr1);
                     printf("\n");
                     scanf("%ld", &nbr2);
                     resultat = nbr1 - nbr2;
                     printf("%ld - %ld = %ld\n", nbr1, nbr2, resultat);
                     break;
                  case 3:
                     printf("Les deux facteurs de votre multiplication :\n");
                     scanf("%ld", &nbr1);
                     printf("\n");
                     scanf("%ld", &nbr2);
                     resultat = nbr1 * nbr2;
                     printf("%ld X %ld = %ld\n", nbr1, nbr2, resultat);
                     break;
                  case 4:
                     printf("Le dividende et le diviseur de votre division :\n");
                     scanf("%ld", &nbr1);
                     printf("\n");
                     scanf("%ld", &nbr2);
                     resultat = nbr1 / nbr2;
                     printf("%ld / %ld = %ld\n", nbr1, nbr2, resultat);
                     break;
                  case 9:
                     fin = 1;
                     break;
                  default:
                     printf("Le numero que vous demandez n'est pas attribue,\n"
                            " veuillez contacter le service des renseignements\n\n");
                  }
               }
               return 0;
            }
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              23 avril 2006 à 9:17:57

              Re !
              Je l'ai amélioré, et tout marche maintenant. J'ai essayé de faire ton truc sans regarder et j'ai réussi. Et j'ai fais comme toi pour passer les lignes c'est plus clair ;)
              Sinon, j'ai pas très bien compris la différence entre %d %ld %lf ... Comment on sait lequel il faut mettre ?

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

              int main(int argc, char *argv[])
              {
                printf("**-+CALCULATRICE+-**\n\n");
                int choix = 0,fin = 0;
                long nbr1 = 0,nbr2 = 0,nbr3 = 0,resultat = 0;
                while(!fin)
                {
                printf("Quel calcul voulez-vous faire ?\n\n"
                       "1.Addition\n"
                       "2.Soustraction\n"
                       "3.Multiplication\n"
                       "4.Division\n"
                       "9.Quitter\n\n");
                scanf("%d", &choix);
                switch(choix)
                {
                      case 1:
                           printf("Les deux termes de votre addition :\n");
                           scanf("%d", &nbr1);
                           printf("\n");
                           scanf("%d", &nbr2);
                           resultat = nbr1 + nbr2;
                           printf("%d + %d = %d\n\n\n", nbr1, nbr2, resultat);
                           break;
                      case 2:
                           printf("Les deux termes de votre soustraction :\n");
                           scanf("%d", &nbr1);
                           printf("\n");
                           scanf("%d", &nbr2);
                           resultat = nbr1 - nbr2;
                           printf("%d - %d = %d\n\n\n", nbr1, nbr2, resultat);
                           break;
                      case 3:
                           printf("Les deux facteurs de votre multiplication :\n");
                           scanf("%d", &nbr1);
                           printf("\n");
                           scanf("%d", &nbr2);
                           resultat = nbr1 * nbr2;
                           printf("%d X %d = %d\n\n\n", nbr1, nbr2, resultat);
                           break;
                      case 4:
                           printf("Le dividende et le diviseur de votre division :\n");
                           scanf("%d", &nbr1);
                           printf("\n");
                           scanf("%d", &nbr2);
                           resultat = nbr1 / nbr2;
                           nbr3 = nbr1%nbr2;
                           printf("%d / %d = %d\t reste : %d\n\n\n", nbr1, nbr2, resultat, nbr3);
                           break;
                      case 9:
                           fin=1;
                           break;
                      default:
                           printf("Le numero que vous demandez n'est pas attribue, veuillez contacter le service des renseignements\n\n");
                }
              }
                return 0;
              }


              Je vais attaquer la suite du tuto.
              • Partager sur Facebook
              • Partager sur Twitter
                23 avril 2006 à 9:29:31

                Citation : Groovy

                Sinon, j'ai pas très bien compris la différence entre %d %ld %lf ... Comment on sait lequel il faut mettre ?



                http://dpobel.free.fr/man/html/affiche_man.php/3138/man/scanf/ > CONVERSIONS > "Les conversions suivantes sont disponibles :" > enjoy !
                • Partager sur Facebook
                • Partager sur Twitter
                  23 avril 2006 à 11:26:02

                  Citation : Groovy

                  Sinon, j'ai pas très bien compris la différence entre %d %ld %lf ... Comment on sait lequel il faut mettre ?


                  Effectivement, toujours des problèmes de cohérence entre type et formats.

                  Project : OP code
                  Compiler : GNU GCC Compiler (called directly)
                  Directory : C:\dev\forums\OP\
                  --------------------------------------------------------------------------------
                  Switching to target: default
                  Compiling: main.c
                  main.c: In function `main_':
                  main.c:22: warning: int format, long int arg (arg 2)
                  main.c:24: warning: int format, long int arg (arg 2)
                  main.c:26: warning: int format, long int arg (arg 2)
                  main.c:26: warning: int format, long int arg (arg 3)
                  main.c:26: warning: int format, long int arg (arg 4)
                  main.c:30: warning: int format, long int arg (arg 2)
                  main.c:32: warning: int format, long int arg (arg 2)
                  main.c:34: warning: int format, long int arg (arg 2)
                  main.c:34: warning: int format, long int arg (arg 3)
                  main.c:34: warning: int format, long int arg (arg 4)
                  main.c:38: warning: int format, long int arg (arg 2)
                  main.c:40: warning: int format, long int arg (arg 2)
                  main.c:42: warning: int format, long int arg (arg 2)
                  main.c:42: warning: int format, long int arg (arg 3)
                  main.c:42: warning: int format, long int arg (arg 4)
                  main.c:46: warning: int format, long int arg (arg 2)
                  main.c:48: warning: int format, long int arg (arg 2)
                  main.c:51: warning: int format, long int arg (arg 2)
                  main.c:51: warning: int format, long int arg (arg 3)
                  main.c:51: warning: int format, long int arg (arg 4)
                  main.c:51: warning: int format, long int arg (arg 5)
                  main.c:54: warning: will never be executed
                  Linking console executable: C:\dev\forums\OP\01.exe
                  Process terminated with status 0 (0 minutes, 1 seconds)
                  0 errors, 22 warnings


                  A part ça, la division par 0 n'est toujours pas interdite...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !

                  Petit 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