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 :

Afficher uniquement les majuscules et minuscules du code ASCII


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Afficher uniquement les majuscules et minuscules du code ASCII
    Bonjour à tous,

    Je reviens vers vous pour un autre soucis.
    J'ai à faire un programme qui affiche UNIQUEMENT les lettres majuscules et minuscules du code ASCII.

    J'ai réussi à afficher tous les caractères mais je ne sais pas comment seulement afficher ceux demandés...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int i=0;
     
        while(i<=256)
        {
            printf("Code ASCII: %d  Carractere: %c\n", i, i);
            i++;
        }
        return 0;
    }

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    regarde la table et fais un if qui n'affiche que si c'est ce que tu veux...
    http://www.google.ch/imgres?imgurl=h...ed=0CEsQ9QEwBA

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    1/ le code ascii ne va pas au dela de 128 caractères

    2/islower et isupper dans <ctype.h>. En n'oubliant pas qu'ils ne prennent par des char comme premier argument mais des char casté en unsigned char et recasté en int (dernière étable qui se fait implicitement lors de l'appel).

    3/ ne pas oublier de définir la locale correctement pour traiter correctement le jeu de caractère utilisé par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       setlocale(LC_ALL, "");
    en début de programme.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Jean-Marc, je ne suis qu'un simple étudiant qui vient de commencer la programmation depuis un peu plus de 2 mois maintenant. Désolé mais je ne comprends strictement rien à ce que tu me conseil de faire... :-/

    Ta solution est peut être la meilleur mais je doute que mon prof veuille ça..

    Quant au "if()", j'ai pensé aussi à ça mais je me suis demandé si il n'y avait pas une fonction ou une autre façon qui demanderais JUSTE les majuscules et les minuscules sans passer par des "if()".

    Si quelqu'un a une autre solution, je suis preneur ! :-)

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par psiko Voir le message
    Ta solution est peut être la meilleur mais je doute que mon prof veuille ça.
    Si la solution désirée est autre que l'utilisation de islower, isupper, tu as un problème avec la qualité des cours que tu suis.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Si la solution désirée est autre que l'utilisation de islower, isupper, tu as un problème avec la qualité des cours que tu suis.
    Ce n'est pas que la qualité de mes cours a un problème, c'est juste que l'on a pas encore vu ça et qu'il aimerais bien qu'on le fasse autrement...

    Maintenant si tu es venu pour critiquer ma formation, merci pour ton aide mais ça me suffira.

  7. #7
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    C'est quoi le but de exo ? Tu as le code ascii sur wikipedia http://fr.wikipedia.org/wiki/America...on_Interchange

    Si le but et d'afficher juste les minuscule et majuscule sur ta boucle ben tu fais une boucle correspondant de 'A' a 'z' j'imagine.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    J'ai finalement fait avec des "if()".

    Merci pour votre aide.

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int i=0;
     
        while(i<=256)
        {
            if((i>=65 && i<=90) || (i>=97 && i<=122))
            {
                printf("Code ASCII: %d  Carractere: %c\n", i, i);
            }
            i++;
        }
     
        return 0;
    }

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Je ne trouve pas ce code très malin. Premièrement, tu fais un while() sur tous les caractères alors que tu connais les plages des lettres. Il suffit de faire 2 boucles, une sur chaque plage (comme suggéré par Kannagi). Deuxièmement, tu utilises une valeur "en dur" des lettres avec leur code ASCII avec que tu peux utiliser une valeur "symbolique" avec la lettre elle-même.

    Enfin, Jean-Marc.Bourguet a raison (comme souvent ^^) : tu devrais utiliser les fonctions isupper() et islower() pour tester si un caractère donné est une lettre minuscule ou majuscule. Faire des if() et connaitre les plages revient à recoder une partie de ces fonctions.

    Voici les 2 solutions (2 boucles et isupper()/islower()):

    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
    30
    31
    32
     
    #include <ctype.h>
    #include <limits.h>
    #include <stdio.h>
     
    int main(void)
    {
        // Maj
        for(char c = 'A'; c <= 'Z'; c++)
        {
            printf("%d = %c\n", c, c);
        }
     
        // Min
        for(char c = 'a'; c <= 'z'; c++)
        {
            printf("%d = %c\n", c, c);
        }
     
        // on utilise la local par defaut. Voir la section 6 pour ce que cela implique : http://man.developpez.com/man3/isalpha/#L6
        for(char c = 0; c < CHAR_MAX; c++)
        {
            if(islower(c) != 0)
            {
                printf("Min -> %d = %c\n", c, c);
            }
            else if(isupper(c) != 0)
            {
                printf("Maj -> %d = %c\n", c, c);
            }
        }
    }
    @Jean-Marc : pourquoi avoir besoin d'un cast ?

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Voici les 2 solutions (2 boucles et isupper()/islower()):

    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
    30
    31
    32
     
    #include <ctype.h>
    #include <limits.h>
    #include <stdio.h>
     
    int main(void)
    {
        // Maj
        for(char c = 'A'; c <= 'Z'; c++)
        {
            printf("%d = %c\n", c, c);
        }
     
        // Min
        for(char c = 'a'; c <= 'z'; c++)
        {
            printf("%d = %c\n", c, c);
        }
     
        // on utilise la local par defaut. Voir la section 6 pour ce que cela implique : http://man.developpez.com/man3/isalpha/#L6
        for(char c = 0; c < CHAR_MAX; c++)
        {
            if(islower(c) != 0)
            {
                printf("Min -> %d = %c\n", c, c);
            }
            else if(isupper(c) != 0)
            {
                printf("Maj -> %d = %c\n", c, c);
            }
        }
    }
    @Jean-Marc : pourquoi avoir besoin d'un cast ?
    Petits problemes, il faudrait partir de CHAR_MIN parce que char est souvent signe (bon, dans le charset par default il n'y a pas de lettre <0) et tu ne fais pas ta boucle pour CHAR_MAX.

    Le cast est necessaire pour les valeurs <0, parce que isXXX utilisent la meme convention que getch et qui permet d'avoir EOF != de tous les char. Il faut caster en (unsigned char) pour avoir une valeur positive.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    J'ai testé les deux façons de le faire et j'ai maintenant compris les islower() et le isupper().

    C'est d'autant plus simple de faire comme ça, effectivement.
    N'ayant pas vu le isupper() ni le islower() je vais garder l'option des boucles.

    Un grand merci à vous deux ! :-)

  12. #12
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    De rien

    Tu peux maintenant cliquer sur le bouton en bas de la page.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [cURL] Afficher uniquement les entêtes
    Par LordDaedalus dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 08/02/2008, 22h55
  2. [onKeydown] Probleme avec pour detecter les majuscules des minuscules
    Par magnus2005 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/09/2006, 22h48
  3. Réponses: 1
    Dernier message: 12/07/2006, 09h51
  4. Réponses: 4
    Dernier message: 05/07/2006, 21h58
  5. Shell - Problème pour gérer les majuscules et minuscules
    Par claralavraie dans le forum Linux
    Réponses: 6
    Dernier message: 11/01/2006, 17h17

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