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 :

Alternative Caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 6
    Par défaut Alternative Caractère
    Bonsoir je suis étudiant en informatique 1TI Bac+3 en Belgique.

    Dans le cadre de mes cours de langage C j'ai une série de diagramme à réalier.

    Un des Diagramme me pose problème, voici l'énoncé.


    (Les problèmes rencontrés sont mis en commentaires)
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        char d;
        printf("Entrez un caractere : ");
        scanf("%c",&d);
        if(XXXXXXXXXX) // Comment faire cette détection ?
        {
            printf("\nChiffre\n");
        }
        else
        {
            if((d>='97')&&(d<='122')) // Celà ne fonctionne pas ? Je pensait faire via le code ASCII.
            {
                printf("\nLettre\n");
            }
            else
            {
                printf("\nAutre\n");
            }
        }
        system("PAUSE");
    }
    Merci de votre aide,

    Gaëtan,

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Un caractère mis entre apostrophe correspond à sa valeur ASCII. 'a' correspond donc à 97. Il ne faut donc pas mettre '97'.
    (D'ailleurs, il faut éviter les chiffres magiques, d'une manière générale.)

    Dans ta ligne 16, remplace simplement 97 et 122 par les lettres correspondantes. N'oublie pas non plus de gérer les lettres majuscules.

    Pour les chiffres, c'est le même principe.

    Est-ce que tu as le droit à l'utilisation des fonctions telles que isalpha et isdigit (qui font partie de la norme C) ? Car là ce serait encore plus simple.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Rouchesta Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    if((d>='97')&&(d<='122')) // Celà ne fonctionne pas ? Je pensait faire via le code ASCII.
    Salut

    Tu as fait une erreur de syntaxe. La notation 'x' indique que tu veux le code ascii du caractère 'x'. Ainsi 'a' = 97.
    Donc si tu veux tester qu'un caractère est compris entre a et z, tu peux tester (d >= 97 && d <= 122) (pas portable car si un jour la table change...) ; ou bien (d >= 'a' && d <= 'z') (plus portable car le compilo remplacera 'a' et 'z' par leur valeur ascii) ; mais en aucun cas tu ne peux tester (d >= '97' && d <= '122')...

    Citation Envoyé par Rouchesta Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(XXXXXXXXXX) // Comment faire cette détection ?
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    if (d >= '0' && d <= '9')      // code ascii de d compris entre 48 et 57
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 6
    Par défaut merci
    Merci pour vos réponses.

    Je ne connais pas les fonctions isalpha et isdigit.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Rouchesta Voir le message
    Je ne connais pas les fonctions isalpha et isdigit.
    Ce sont des fonctions indiquant si le caractère passé en paramètre est un alphabétique (isalpha) ou un digit (isgidit) ou autre (isprintable, isblank, ishexdigit, etc...).
    Ca permet de rester évolutif (facilite la gestion des caractères accentués) et normalisé en s'adaptant au changement de la norme (aujourd'hui ascii, demain utf8). Mais je pense que comme il s'agit d'un exercice destiné à te montrer la manipulation des caractères, il vaut mieux que tu ne les utilises pas...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 6
    Par défaut Rép
    Ne s'agirait-il pas de fonction ajouter avec C++ ?

    Car nous ne voyons que le C.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Citation Envoyé par Rouchesta Voir le message
    Ne s'agirait-il pas de fonction ajouter avec C++ ?

    Car nous ne voyons que le C.
    De quoi parles-tu ? De isalpha et isdigit ? Ces fonctions font partie du C.

    http://man.developpez.com/man3/isalpha.3.php

  8. #8
    Membre éprouvé Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Par défaut
    Regarde du coté de ctype.h, certaines fonctions devraient t'intéresser...

  9. #9
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    +1

    Pour info, le code ASCII de quelques caractères.
    • '0' => 48
    • '9' => 57
    • 'A' => 65
    • 'Z' => 90
    • 'a' => 97
    • 'z' => 122

    Par contre, pour les caracères accentués...
    Mais même les fonctions de ctype.h n'en tiennent pas compte.

  10. #10
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    if(XXXXXXXXXX) // Comment faire cette détection ?
    Comme l'a fait remarquer Steph_ng8, le code ASCII des caractères numériques vont de 48 ('0') à 57 ('9'). Les systèmes (Windows, Linux, Mac OS X) n'utilisent cependant pas ASCII (code utilisant 7 bits) pour coder les caractères dans l'ordinateur mais une extension d'ASCII (un code 8 bits, 16 bits ou autre). D'autres systèmes utilisent même des codes radicalement différents du code ASCII, mais il y a de fortes chances que tu n'auras jamais à travailler sur ce genre de système toute ta vie.

    Alors, si tu es sur un système compatible avec ASCII, tu peux utiliser les codes ASCII pour détecter le type d'un caractère. Pour savoir si un caractère est un chiffre, tu peux donc utiliser : if (d >= 48 && d <= 57). Sinon, il y a plusieurs autres façons portables mais la plus simple est d'utiliser isdigit (ctype.h) : if (isdigit(d)).

    if((d>='97')&&(d<='122')) // Celà ne fonctionne pas ? Je pensait faire via le code ASCII.
    Il faut enlever les quotes autour de 97 et de 122. En effet, '5' par exemple désigne le caractère de code ASCII 53 alors que 5, c'est le nombre 5. Ainsi, '5' + 1 = 54, soit '6', alors que 5 + 1 = 6. Après, '97', ce n'est une expression portable. Ca peut valoir une chose avec un compilateur donné et une autre chose avec un autre compilateur. Enfi, ici aussi, il vaut mieux de faire appel à
    ctype.h : if (isalpha(d))

  11. #11
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Il est possible pour tes tests de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Différents tests d'un caractère "chiffre" ...
    if(d>='0' && d<='9') ...
    // ... ou en héxadécimal
    if(d>=0x30 && d<=0x39) ...
    // ... ou en décimal
    if(d>=48 && d<=57) ...
    Sinon, comme le précise Xtrem_Voyageur, d'intégrer les macros de ctype.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pour les chiffres
    if(isdigit(d)) ...
    Mais si tu regardes la définition de "isdigit" dans ctype.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define isdigit(x) ((x) >= '0' && (x) <= '9')
    C'est pareil pour les autres caractères. Attention à la casse (majuscule, minuscule). Pour les caractères accentués, tu doit tenir de ton codage de caractères (ex: UTF8 / ISO-8859-15).

    A toi de choisir.

  12. #12
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Elijha
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(d>='0' && d<='9') ...
    Ca c'est portable, car la norme exige que les codes associés aux caractères de '0' à '9' se suivent dans le jeu de caractères utilisé par l'environnement.

    Citation Envoyé par Elijha
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(d>=0x30 && d<=0x39) ...
    // ... ou en décimal
    if(d>=48 && d<=57)
    Cela ne marche que sur un système compatible ASCII (MS-DOS, Windows, Linux, Mac OS X, ...). Ca ne marche pas sur l'AS/400, le BS2000/OSD ou encore l'Unisys MCP par exemple car ces systèmes utilisent le codage EBCDIC dans lequel le code du caractère '0' est 240 ...

Discussions similaires

  1. [Débutant] Alterner remplacement d'une chaine de caractère dans un fichier texte
    Par zazoudandan dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/05/2015, 09h38
  2. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  3. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  4. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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