Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide langage C

Condition : nombre entier

    22 septembre 2017 à 13:07:29

    Bonjour, je voudrais savoir comment faire afin de vérifier si un nombre saisie par l"utilisateur est un nombre entier ou non et que :

    si il saisit des caractères ou des nombres décimaux ;

    alors afficher un message d'erreur et retourner au début afin de redemander la saisie d'un nombre entier

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2017 à 13:36:12

      Yop,

      Tu peux recuperer la saisie avec fgets(), donc sous forme de chaine de caracteres. Ensuite tu peux analyser la chaine en cherchant le '.' avec strchr() par exemple, verifier les caracteres avec isdigit(), etc ... puis convertir la chaine en entier avec strtol() par exemple .

      Une idee toute bete serait de parcourir la chaine recuperee, et de tester tous les caracteres avec isdigit().

      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2017 à 13:53:41

        C'est aussi possible avec scanf, selon le format que tu veux:

        char dummy;
        int n;
        
        switch (scanf("%4d%1[\n]", &n, &dummy))
        {
        case EOF:
            // EOF rencontré avant d'avoir pu lire un item
        case 0:
            // Erreur de format au premier item
        case 1:
            // L'entier n'est pas suivi d'un retour à la ligne
        case 2:
            // Ok
        }
        • Partager sur Facebook
        • Partager sur Twitter
        Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
          22 septembre 2017 à 14:47:42

          Bonjour, tout d'abord merci de vos réponses. J'ai donc essayé la commande isdigit que je ne connaissais pas, si j'ai bien compris elle test ce qu'on lui demande de tester et renvoie la valeur 0 si ce sont des caractères ou 1 si ce sont des chiffres. Voici ce que j'ai essayé de faire mais cela ne fonctionne pas pourriez-vous m'éclairez sur mon erreur o_O Merci d'avance :p

          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2017 à 14:55:36

            Hello,

            Pour poster du code utilise le bouton </> et choisis c++ comme langage.

            Pour commencer, a et b ne sont pas initialisés. Ensuite, voir le manuel de isdigit()

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              22 septembre 2017 à 16:05:45

              #include <stdio.h>
              #include <stdlib.h>
              #include <string.h>
              
              int main()
              {
                 char a[50] = "";
                 char b[50] = "";
                 int num1 = 0;
                 int num2 = 0;
              
                  printf("Saisir a : ");
                  scanf("%49s", a);
                  printf("Saisir b : ");
                  scanf("%49s", b);
              
                 if(strchr(a, '.') != 0 || strchr(b, '.') != 0 )
              		puts("Merci de ne pas saisir de nombres décimaux.");
              
              	else
                          num1 = strtol(a, NULL, 10);
                          num2 = strtol(b, NULL, 10);
              
              		if(0 == num1 || 0 == num2)
              
                          puts("Merci de ne pas saisir de caracteres.");
              
              		else {
              
                          if (a<b) { printf("Le deuxieme nombre est le plus grand c'est %49s\n",b); }
              
                          else if (a>b) { printf("Le premier nombre est le plus grand c'est %49s\n",a);}
              
                          else {printf("Les deux nombres sont égaux\n"); }}
              
              
              	return 0;
              }
              
              Voila ce que j'ai fais, cette fois le programme détecte bien si c'est un nombre décimal ou si il y a des caractère mais maintenant il ne fonctionne plus dans la dernière partie :/
              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2017 à 16:38:14

                Hello,

                3 choses:

                • on ne compare pas des strings avec des opérateurs arithmétiques, mais avec des fonctions (strcmp() entre autres). Dans ton cas, tu dois comparer num1 et num2, qui remplaceront les a et b des lignes 24 et 26
                • tu as mal lu le manuel de strtol(): le string 12a3bc va bien renvoyer 12 (en base 10), ce n'est pour autant un nombre correct
                • ce n'est parce que num1 (ou num2) vaut zéro que a (ou b) comporte nécessairement un caractère

                -
                Edité par edgarjacobs 22 septembre 2017 à 16:40:28

                • Partager sur Facebook
                • Partager sur Twitter

                On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                Aide langage 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