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 :

Utiliser une variable char dans une condition


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Utiliser une variable char dans une condition
    bonjour a tous,

    je vous soumets un cas auquel je ne trouve pas de réponse.
    j'essaie en vain d'utiliser la valeur d'une variable char pour l'utiliser dans une condition.

    voici mon code, j'aimerais que le code renvoie "heureusement que c'est cederico!" si je mets un poids entre 50 et 100Kgs et que je rentre mon prenom,cedric:
    Or, cette condition est simplement ignorée.

    Désolé pour le code un peu humoristique, mais j'apprends le C et je décompresse en mettant des codes un peu loufoques ;-).

    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main(int argc, char * argv[])
     
    {
     
     
        int poids = 0;
        char prenom [50];
        printf("Quel est votre poids?");
        scanf("%d", &poids);
        printf("Quel est votre prenom?");
        scanf("%s", &prenom);
        printf("votre poids est donc de %d kgs\n\n", poids);
        printf("votre prenom est donc %s!\n\n", prenom);
     
        if (poids <= 15)
        {
            printf("vous etes trop maigre! allez au mc do!\n\n");
        }
        else if (poids <=50)
        {
            printf("ca va mais attention a ne pas grossir bouboule!\n\n");
        }
        else if (prenom == "cedric")
        {
            printf("heuresement que c'est cederico !\n\n");
        }
        else
        {
            printf("il faut ralentir la raclette! grosse bouboule\n\n");
        }
        return 0;
    }
    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 673
    Points
    10 673
    Par défaut
    C'est 1 des problèmes majeurs du C: ne pas avoir de support de chaine de caractères natif
    Le C++ a string

    Et donc if (prenom == "cedric") { cela ne fonctionne pas comme tu le penses

    Dans ton cas
    1) Passer par strcmp, strncmp ou ...
    2) Tester caractère par caractère en faisant attention à la taille.
    if ((strlen(prenom) > 5) && (prenom[0] == 'c') && (prenom[1] == 'e') && (prenom[2] == 'd') && (prenom[3] == 'r') && (prenom[4] == 'i') && (prenom[5] == 'c')) {

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    merci ;-) j ai essayé ca marche effectivement

    dis moi tu sais pour quelle raison la condition sur une chaine de caractere ne marchait pas?
    tu peux expliciter un peu quand tu dis "ne pas avoir de support de chaine de caractères natif". juste pour ma comprehension

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 673
    Points
    10 673
    Par défaut
    Citation Envoyé par cedriclv Voir le message
    dis moi tu sais pour quelle raison la condition sur une chaine de caractere ne marchait pas?
    Si un expert passe il pourra infirmer ou confirmer

    Mais en C, l'opérateur == ne fonctionne qu'avec 2 entiers (il faut plus le voir niveau binaire, 2 tableaux de 0 ou de 1).
    Donc ici, je pense que tu compares 2 pointeurs (puisqu'une chaîne de caractères c'est juste un pointeur sur la première lettre)


    Citation Envoyé par cedriclv Voir le message
    tu peux expliciter un peu quand tu dis "ne pas avoir de support de chaine de caractères natif". juste pour ma comprehension
    En natif, cela veut dire que le compilateur détecte que ce sont 2 chaînes de caractères et donc automatiquement fait le nécessaire pour la comparaison.
    Par exemple, il appelle en prenant la chaîne à gauche soit la surcharge de l'opérateur == soit une méthode isEqual ou équivalente.
    Comme avec javascript ou python

    En C++, si tu utilises les string je pense que c'est ce qui se passe ... avec peut-être une conversion implicite de la chaîne à droite en string.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 482
    Points : 13 680
    Points
    13 680
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if (prenom == "cedric")
    Il s'agit en effet d'une comparaison d'adresse : celle de prenom[0] et celle de la zone ou la chaine littérale "cedric" a été stockée.

    Il n'y pas d'opérateur en C pour travailler avec les chaines de caractères. Il faut donc passer par les fonctions fournies via string.h.

  6. #6
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour,
    juste une petite remarque au passage: si le nom est cedric et que le poids est<=15 et donc forcement <=50 l'affichage te convient -il???
    je pense que l'algo est à revoir
    sinon bktero et foetus t'on tout dit...
    bon courage

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    MERCI!! Ca fait plaisir d'avoir des reponses aussi detaillées

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  2. Modif d'une variable char* dans une fonction
    Par kase74 dans le forum Débuter
    Réponses: 4
    Dernier message: 22/01/2009, 08h31
  3. Réponses: 1
    Dernier message: 20/04/2007, 09h12
  4. [PHP-JS] mettre une variable javascript dans une variable php
    Par Mounr dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2007, 09h09
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 17h55

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