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 :

Savoir si une variable est bien un chiffre


Sujet :

C

  1. #21
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    ce que je ferai moi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (scanf ("%d", &choix) != 1) return 0;
     
    return choix;
    Ben non. Tu n'as rien purgé du tout. Si on ne sait pas utiliser scanf(), le mieux est d'apprendre à le faire ou de ne pas l'utiliser.

  2. #22
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fflush(stdin); <-----correction
    heu....en fait je crois que c'est deconceillé (histoire de normes)...meme si ca marche...
    La norme dit que le comportement de fflush() n'est défini que pour les flux sortants. Or stdin est à l'évidence un flux entrant. Le comportement n'est donc pas défini. C'est tout. Le code est donc incorrect.

    Le fait que 'ça marche' est une des possibilité d'un comportement indéfini. Ca ne signifie pas que le code est correct.

    (En fait, sous Linux, "ça ne marche pas" et des cas de plantages ont été rapportés).

  3. #23
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    j'essaye donc de la même façon de ne prendre qu'une chaine de caractères minuscules dans la variable chaine

    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
    int saisie(){
      char chaine[30];
      int ok = 0;
      int retour;
     
      printf("Chaine en minuscules à inserer ? \n");
     
      while ( !ok ){
     
        retour = scanf("%s%[a-z][^\n]", chaine);
        printf("retour : %d\n", retour);
        if ( !retour ){
          /* erreur de saisie, on vide le flux */
          int c;
          while ( ((c = getchar()) != '\n') && c != EOF);
          printf("Perdu, il faut rentrer uniquement des minuscules ! \n");
          printf("Une autre chance ? \n");
        }
        else {
          /* reussite de la saisie */
          getchar(); /* on enleve le '\n' restant */
          printf("saisie acceptee\n");
          ok = 1;  /* sort de la boucle */
          printf("%s", chaine);
        }
      }
     
         return 1;
    }
    mais il me retourne une erreur de segmentation et il accepte n'importe quelle chaîne...

  4. #24
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    C'est normal que tu ne limites pas la taille ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #25
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    la taille de la chaine ?

  6. #26
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Oui. Je ne vois rien pour la limiter dans le scanf()...
    PS: Tu as sûr qu'il faut deux "%" dans le format ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #27
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasi
    j'essaye donc de la même façon de ne prendre qu'une chaine de caractères minuscules dans la variable chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        retour = scanf("%s%[a-z][^\n]", chaine);
    Je vois 2 "%" et 1 variable... C'est là que ça dépasse ma compréhension et que j'utilise fgets(), islower() etc.

  8. #28
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    en testant la valeur de sortie ?

    je peut utiliser islower pour convertir des majuscules si jamais l'utilisateur en rentre mais que faire pour les autres caractères ? (entiers, ect...)

  9. #29
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasi
    en testant la valeur de sortie ?
    kékidi ?
    je peut utiliser islower pour convertir des majuscules
    islower() ne convertit rien. Il teste. Pour convertir, c'est tolower()...
    si jamais l'utilisateur en rentre mais que faire pour les autres caractères ? (entiers, ect...)
    C'est trop pour mon neurone, là. Ca part dans tout les sens...

    Alors 1 problème à la fois. Que veux-tu faire exactement ?

  10. #30
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    tester si la chaine rentrée par l'utilisateur est bien une chaine de caractères minuscules

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    tester si on a aucune majuscule (on considere qu'on peut avoir des caracteres speciaux):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int IsMaj(char *str)
    {
        for (int i = 0; str[i]; i++)
        {
             if (str[i]>= 'A' && str[i] <= 'Z')
                  return (-1);
        }
         return (1);
    }

  12. #32
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    je vais rajouter mon grain de sel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int isLowerStr(const char *s) {
     
      while (*s && islower(*s)) {
         s++;
      }
     
      return (*s == 0);
    }
    Pour les fainéant de mon genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int checkCharTypeStr(const char *s, int (*ctype)(char)) {
     
       while (*s && ctype(*s)) {
          s++;
       }
       return (*s == 0);
    }
    on utilise de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      char *text = "le papa de marie fume la pipe";
     
      checkCharTypeStr(text, islower);
      checkCharTypeStr(text, isalpha);

  13. #33
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par toxycyty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             if (str[i]>= 'A' && str[i] <= 'Z')
    Pas portable. Il y a isupper() pour ça...

  14. #34
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasi
    tester si la chaine rentrée par l'utilisateur est bien une chaine de caractères minuscules
    Une boucle avec islower() de <ctype.h>

  15. #35
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    merci la vérification fonctionne bien

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/10/2006, 10h55
  2. Réponses: 3
    Dernier message: 12/10/2006, 16h39
  3. Réponses: 3
    Dernier message: 28/07/2006, 15h45
  4. [ImageMagick] Savoir si une URL est bien une image
    Par Oberown dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/01/2006, 23h13
  5. Comment savoir si une variable est initialisée ?
    Par nabix dans le forum Général Python
    Réponses: 8
    Dernier message: 10/03/2005, 15h12

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