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 :

comparaison char - caractere


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut comparaison char - caractere
    bonjour,

    je viens de commencer en C, par un programme tout simple: calculer Vitesse distance et temps:

    1 - parametre manquant? vitesse distance ou temps

    en fonction de la reponse, on donne les 2 autres parametres, , et le prog donne la valeur inconnue...

    tres simple!
    mais je n arrive pas a faire la comparaison entre "p", qui est le parametre manquant, et ce que vas taper l utilisateur (v d ou t)

    je sais qu il y a des moyens plus simple, avec strcmp, mais pour bien voir le fonctionnement de base.

    voici mon code, en cour d elaboration:

    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
    #include <stdio.h>
     
    int main ()
    {
    char p;
    int vit,dist,tps;
     
     
        printf("Calcul de temps\n");
        printf("Paramètre manquant? V, D, T ?");
        scanf("%c", &p);
     
        if ( p == "V" )
        {
             printf("Distance KM?");
             scanf("%d",&dist);
     
             printf("Temps Min?");
             scanf("%d",&tps);
     
             vit= dist + tps;
     
             printf("Votre vitesse est de %d KM/H", vit); 
         }
     
         else 
             printf("en attente de creation\n");
     
          system("PAUSE"); 
          return 0;   
    }
    par avance merci pour vos conseil et suggestion ! mais je veux pas forcement les moyens les plus simples!

    MERCI

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ici, tu compare UN caractère à une CHAINE de caractères :
    Il faut écrire
    Après, utiliser scanf n'est pas évident, je te conseille la lecture de http://xrenault.developpez.com/tutoriels/c/scanf/
    Dernière modification par Caro-Line ; 15/10/2010 à 10h02.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Accessoirement, la vitesse n'est pas égale à la distance + le temps .
    On va avoir
    toutes ces grandeurs ne devraient pas être des entiers mais des flottants

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    super merci, pour la correction!!

    sinon pour la formule, ben ........., on vas dire que j ai pas reflechis !!

    Merci

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    encore une petite question, on fais comment pour limiter l affichage d un float a 2, 3 4... chiffre apres la virgule ??

    Est il possible de transformer, une donnée de l 'utilisateur debile (4,1234567876545678) en 4 ou 4,5 ou 4,2 selon ce dont j ai besoin ??

    merci !

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par defcon29 Voir le message
    encore une petite question, on fais comment pour limiter l affichage d un float a 2, 3 4... chiffre apres la virgule ??

    Est il possible de transformer, une donnée de l 'utilisateur debile (4,1234567876545678) en 4 ou 4,5 ou 4,2 selon ce dont j ai besoin ??

    merci !
    http://www.developpez.net/forums/d98...at-via-printf/

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par defcon29 Voir le message
    je sais qu il y a des moyens plus simple, avec strcmp, mais pour bien voir le fonctionnement de base.
    Non. strcmp() est une fonction qui compare deux chaines.

    Faut bien comprendre qu'en C, une chaine n'existe pas en tant qu'entité manipulable. Tout ce que tu peux manipuler, c'est l'adresse de son premier caractère.
    Ensuite, à partir de cette adresse, tu peux passer au caractère suivant et encore au suivant etc jusqu'à avoir traité toute la chaine.

    Il s'ensuit que si tu ceux comparer 2 chaines, te faudra les comparer caractère par caractère. Ben c'est ce que fait strcmp(). Tout simplement.

    Citation Envoyé par defcon29 Voir le message
    par avance merci pour vos conseil et suggestion ! mais je veux pas forcement les moyens les plus simples!
    Ben déjà, ton code de départ semble aller vers une super redondance. S'il te manque V alors tu fais saisir d et t. S'il te manque d, je présume que tu feras saisir V et t (donc double codage). etc.
    Donc déjà, moi je partirais sur une fonction dédiée à la saisie de V, une autre dédiée à la saisie de d et une autre pour t. Ainsi, me suffit d'appeler les bonnes fonctions au bon endroit. Mais bon, ça c'est juste pour faire classe.

    Le vrai problème de ton code, c'est scanf. Mais c'est pas de ta faute. Un débutant ne possède pas encore tous les outils qui vont bien pour faire de la belle saisie et donc on est obligé de lui parler de scanf() au-moins pour pouvoir faire les premiers TP.
    Le problème de scanf, c'est qu'il attend un truc "formaté". Et que ce que tape l'utilisateur est tout sauf formaté. Même s'il est de bonne volonté, ça merdera quand-même. Parce que scanf ne traite que ce qu'il peut comprendre. Et ce qu'il ne comprend pas, ben il le laisse dans le tampon clavier.

    Et donc imaginons que tu fasses saisir un age scanf("%d") puis un nom scanf("%s"). Tu entres l'age 18, tu entreras correctement '1' puis '8' puis <entrée>. Ben ce <entrée> n'étant pas du numérique, il ne sera pas pris en compte par le scanf("%d") et restera dans le tampon clavier. Ensuite, arrivé à la saisie du nom, là le "entrée" de la saisie précédente sera pris en compte et récupéré sans que le programme ne ce soit arrêté pour te laisser taper quoi que ce soit (puisqu'il a déjà qqchose).
    Un autre problème est que dans la saisie du nom, l'utilisateur pourra rentrer autant de caractères qu'il a envie. scanf() ne limitera pas. Et tant pis si la zone du nom n'a pas la taille adaptée.

    Et donc c'est pour tout ça que scanf n'est absolument pas adapté aux saisies clavier.

    Une des méthodes les plus simples à mettre en oeuvre, pour éliminer ces problèmes, est de faire saisir que du texte en utilisant fgets(). Puis traiter ce texte via sscanf(). Déjà fgets() limite la saisie ce qui évite de trop en entrer. Et ça permet en plus un contrôle de saisie car sscanf() renvoie le nb d'éléments récupérés et qu'il est facile de comparer ce nb avec le nb attendu.

    Exemple
    Code c : 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
    #include <stdio.h>
    int main()
    {
        char nom[21];
        int age;
        char saisie[80];
     
        // Saisie de l'âge
        while (1)
        {
             printf("Entrez votre age :\n");
             fgets(saisie, 80; stdin);
     
             // Contrôle age ok - Si ok, on sort de la boucle
             if (sscanf(saisie, "%d", &age) == 1) break;
     
             // Saisie incorrecte
             printf("Saisie incorrecte - Recommencez\n");
         }
     
        // Saisie du nom
        while (1)
        {
             printf("Entrez votre nom :\n");
             fgets(saisie, 80; stdin);
     
             // Contrôle nom ok - Si ok, on sort de la boucle
             if (sscanf(saisie, "%20s", nom) == 1) break;
     
             // Saisie incorrecte
             printf("Saisie incorrecte - Recommencez\n");
         }
    }

    Voilà. J'espère que tu vois le principe qui peut être facilement adapté à la saisie des nombres flottants. Normalement il reste le risque que l'utilisateur entre plus de 80 caractères alors que la saisie n'en accepte que 80 (ou plus exactement 79 car fgets() garde une place pour le '\0'). Dans ce cas, le surplus reste dans le tampon clavier. Pour bien faire, faudrait rajouter une boucle à base de fgetc() pour vider ledit tampon mais j'ai pas voulu en rajouter trop...
    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]

Discussions similaires

  1. Comparaison deux caractere
    Par lahlaly dans le forum C
    Réponses: 8
    Dernier message: 08/03/2013, 07h50
  2. Comparaison char* et NULL
    Par mercure07 dans le forum C++
    Réponses: 3
    Dernier message: 04/12/2009, 09h49
  3. [MySQL] Requete de comparaison sans caracteres speciaux
    Par thecanea dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/06/2009, 11h16
  4. Réponses: 9
    Dernier message: 16/07/2008, 11h01
  5. [Débutant] comparaison de caracteres
    Par nanath02 dans le forum Langage
    Réponses: 7
    Dernier message: 02/10/2007, 23h18

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