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 :

Aide pour un warning à la compilation + fonction pour majuscule


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Points : 91
    Points
    91
    Par défaut Aide pour un warning à la compilation + fonction pour majuscule
    Bonjour tout le monde,

    Premièrement, comme ça, ça sera fait : existe-t-il une fonction pour mettre les caractères en majuscule, ou faut-t-il se débrouiller en diminuant de 32 la valeur des caractères (décalage des minuscules vers les majuscules dans la table ASCII) ?

    Ensuite, mon programme marche très bien, mais j'ai un warning à la compilation, c'est pour ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char demande[2]={0};
    scanf("%2[a-z,A-Z]s", &demande);
    Le warning: "char format, different type arg (arg 2)" le numéro de ligne est celle du scanf.

    Merci.
    Pierre.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Pierre.g
    Premièrement, comme ça, ça sera fait : existe-t-il une fonction pour mettre les caractères en majuscule, ou faut-t-il se débrouiller en diminuant de 32 la valeur des caractères (décalage des minuscules vers les majuscules dans la table ASCII) ?
    Fonction toupper() declaree dans ctype.h. Elle prend un caractere et revois la version majuscule de celui-ci.
    Il ne faut _jamais_ bidouiller les codes des caracteres. La machine peut ne pas utiliser l'ASCII pour coder les caracteres.

    Le warning: "char format, different type arg (arg 2)" le numéro de ligne est celle du scanf.
    scanf() attend un char *, tu lui envoies un char **.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%2[a-z,A-Z]s", demande);

  3. #3
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par DaZumba
    Fonction toupper() declaree dans ctype.h. Elle prend un caractere et revois la version majuscule de celui-ci.
    Il ne faut _jamais_ bidouiller les codes des caracteres. La machine peut ne pas utiliser l'ASCII pour coder les caracteres.
    Ok pour l'utilisation de toupper().
    Par contre, si on ne devait pas l'utiliser (impératif d'exercice par exemple), quelqu'un peut-il me confirmer qu'au lieu de soustraire 32 (pas forcement standard) il vaudrait mieux soustraire (A-a) ?
    Cela fonctionnerait-il quelque soit le standard (ASCII ou autres)?
    Merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Points : 91
    Points
    91
    Par défaut
    Ok, merci.

    Pour le scanf, j'avais apris qu'il falais toujours lui filer l'adresse
    Par contre, ma variable demande n'est pas un pointeur, donc je ne comprend pas trop ...
    Enfin, ça marche et ça se compile sans warning, donc c'est ok.

    "Il ne faut _jamais_ bidouiller les codes des caracteres"
    => arf, c'est déjà ce que j'ai fais quelque lignes au dessus, mais mon programme est fait pour tourné que sous Windows (modification du registre), donc Windows 95 à Vista utilisent-t-il l'ASCII ?

    Et comme c'est un programme sous windows, c'est pas plus rapide d'utiliser la manière que je disais ?

    Merci.

    edit : pas con ta question Lucky-94, ça m'interesse aussi.

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Lucky-94
    il vaudrait mieux soustraire (A-a) ?
    Cela fonctionnerait-il quelque soit le standard (ASCII ou autres)?
    Non, car il n'y a aucune garantie que les lettres majuscules suivent les lettres minuscules (ni meme que les lettres de l'alphabet soient dans l'ordre, en fait).

    Citation Envoyé par Pierre.g
    Par contre, ma variable demande n'est pas un pointeur, donc je ne comprend pas trop ...
    Ta variable est un tableau, et le nom d'un tableau est equivalent a un pointeur vers le premier element de ce tableau (ce qu'attend scanf()).

    Citation Envoyé par Pierre.g
    Et comme c'est un programme sous windows, c'est pas plus rapide d'utiliser la manière que je disais ?
    Cela ne devrait pas faire grande difference d'utiliser toupper(). Elle a l'avantage d'etre standard, portable, et de rendre evidentes les intentions du programmeur.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Points : 91
    Points
    91
    Par défaut
    Ah ok, j'avais oublié ça .

    Merci.

  7. #7
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Pierre.g
    edit : pas con ta question Lucky-94, ça m'interesse aussi.
    J'ai lu dans un livre d'algorithme que lorsqu'on voulait passer de majuscule à minuscule ou inversement sans connaître l'écart entre les caractères il suffisait de soustraire une minuscule à une majuscule pour retrouver cet écart.
    Je n'ai pas le livre sous la main mais je pourrais vérifier plus tard.
    Sinon, quelqu'un pourrait-il confirmer cela?

  8. #8
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    Tout faux donc!

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Certains charset ne représentent pas de manière continue les lettres:
    http://fr.wikipedia.org/wiki/EBCDIC

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/06/2015, 13h22
  2. Réponses: 18
    Dernier message: 17/07/2014, 14h13
  3. Réponses: 3
    Dernier message: 18/02/2013, 05h15
  4. Réponses: 2
    Dernier message: 21/02/2011, 17h27
  5. Réponses: 6
    Dernier message: 22/11/2005, 17h08

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