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 :

Le compte est bon : partie utilisateur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut Le compte est bon : partie utilisateur
    Bonsoir,

    Dans l'optique d'améliorer mon programme de "Le compte est bon", je voudrais faire de telle sorte que l'utilisateur puisse rentrer ses lignes de calculs et ainsi comparer à la solution proposée.

    J'ai donc d'abord une question :
    supposons que j'ai un tableau d'entiers qui contienne les nombres tirés. Par exemple, tirage[6] = {5,8,10,25,4,7};
    Je voudrais ensuite créer une chaine de caractères qui contient ce que l'utilisateur rentre au clavier : char c[100];

    Ma question est la suivante; est-il possible de comparer la chaine de caractères avec des entiers? (char c avec tirage[6]). Ainsi, on vérifie que l'utilisateur a bien utilisé les nombres proposés.

    Merci d'avance!

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Je pense qu'une solution possible serait de faire des:
    Et à chaque saisie tu compares la variable nb avec les membres de ton tableau.
    (Il faudrait alors créer un autre tableau pour savoir si on nombre à déjà été entré)
    Le problème avec la solution de comparaison des chaînes de caractères est qu'elle n'offrirait aucune liberté dans l'entrée des nombres.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut
    Oui, je pourrais faire ça, mais la comparaison se fera au fur et à mesure. Enfin, je trouve cette méthode un peu fastidieuse; on rentre un nombre, on le vérifie, on rentre le 2d nombre, on le vérifie, etc....

    Le problème avec la solution de comparaison des chaînes de caractères est qu'elle n'offrirait aucune liberté dans l'entrée des nombres.
    Je n'ai pas compris ce que tu veux dire. Quand on écrit dans une chaine de caractères, on écrit un peu ce qu'on veut, non?

    Mais dans l'absolu, est ce que c'est possible de comparer un string avec des enteirs?

  4. #4
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Non tu peux également rentrer une suite de nombre séparés par des espaces puis faire des scanf consécutifs
    Tu dis:
    Mais dans l'absolu, est ce que c'est possible de comparer un string avec des enteirs?
    Mais que veut dire cette phrase?
    Tu ne peux comparer que deux chaînes de caractères entre elles

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    Non tu peux également rentrer une suite de nombre séparés par des espaces puis faire des scanf consécutifs
    Tu dis:

    Mais que veut dire cette phrase?
    Tu ne peux comparer que deux chaînes de caractères entre elles
    Je veux dire par là ; si j'écris par exemple dans ma chaine : "5*3", est-il possible de comparer les termes de la chaine ("5", "*", "3") avec mon tableau d'entiers?

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    68
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 68
    Par défaut
    Je pense que c'est possible, mais un peu long. Il te suffit de convertir ta chaîne de caractère en entier avant de comparer avec ton tableau tirage[6]. par exemple si l'utilisateur saisie c[100]='15 29 30 17 abt' il te faut:
    -d'abord récupérer les positions de l'espace espace[] ={2,5,8,11}
    -ensuite récupérer les différentes chaînes
    -- char *P[10] et
    p[0] = substr(c,0,espace[0]) = '15'
    p[1] = substr(c,espace[0]+1,espace[1]-espace[0]) ainsi de suite
    -tu converti chaque chaine de caractère en entier avec la fonction sscanf
    sscanf(p[0],&d,&nombre) si la valeur retournée par la fonction sscanf est différente de 1 la conversion n'a pas pu s'effectuer
    -enfin tu pourra comparer les nombres récupérer à ce de ton tableau tirage
    j'espère que j'ai été claire et que je dis vrai

  7. #7
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Si tu veux un test réaliste (qui marche avec une vraie saisie du genre "5 * 8 / 3 + ( 12 / 4 )") il te faut une vraie analyse de la chaîne.
    Je te propose un petit bout de code qui fait ça :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
     
    // Vérifie que tous les nombres trouvés dans saisie font partie de la table tirage.
    // Si un des nombres n'est pas dans le tirage, sa valeur est renvoyée.
    // Sinon, renvoie -1.
    // La table tirage doit se terminer par 0. (on suppose que 0 ne peut jamais faire partie du tirage)
    int verifie_nombres ( const int * tirage , const char * saisie )
        {
        int i,n = -1 ;
        const char * c ;
        for ( c = saisie ; *c ; ++c )
            {
            // si le caractère courant est un chiffre on m-à-j la valeur de n
            if (('0' <= *c) && (*c <= '9'))
                {
                if (n < 0) n = 0 ;
                n = n*10 + *c - '0' ;
                }
            else
                if (n >= 0)
                    {
                    // on parcourt tirage jusqu'à avoir trouvé n ou 0
                    for ( i = 0 ; tirage[i] > 0 ; ++i )
                        if (tirage[i] == n)
                            break ;
                    // si on a atteint la fin (càd 0) on sort
                    if (tirage[i] == 0)
                        return n ;
                    // sinon, on remet n à -1 et on continue l'analyse
                    n = -1 ;
                    }
            }
        // si on arrive ici, c'est qu'on a fini sans erreur !
        return -1 ;
        }
     
     
    void main ()
        {
        char saisie [] = " 5 * 8 + 3 * ( 5 - 6 ) - 14/7" ;
        int  tirage [] = { 14,3,7,5,8,0 } ; // bien penser à finir par 0 !
        int n = verifie_nombres( tirage,saisie ) ; // doit renvoyer 6
        if (n >= 0)
            printf("nombre %d invalide\n",n ) ; 
        }
    Après il te faudra calculer la valeur de l'expression mathématique saisie, et là, tu peux commencer à retrousse tes manches !

    bon courage !

  8. #8
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Tu peux utiliser la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *strstr (const char *meule_de_foin, const char *aiguille);
    qui cherche la sous-chaine auguille dans la chaine botte de foin.
    Je te suggère avant de convertir tes nombres en chaine de caractères en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(destination,"%d",tirage[k]);
    Avec destination un tableau de char adapté et k un entier entre 0 et 5

Discussions similaires

  1. Jeu "Le compte est bon" avec récursivité
    Par elvis54 dans le forum Général Java
    Réponses: 1
    Dernier message: 19/11/2008, 07h50
  2. [Jeu "Le Compte est Bon"] Recherche algorithme
    Par Chriss21 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 29/10/2005, 16h10

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