Probleme Mastermind en C
Fermé
Yohan
-
24 déc. 2009 à 15:30
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 24 déc. 2009 à 17:59
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 24 déc. 2009 à 17:59
A voir également:
- Probleme Mastermind en C
- Technique mastermind ✓ - Forum Java
- Mastermind technique - Forum Loisirs / Divertissements
- Mastermind programme C - Forum C
- [Langage C] jeu mastermind - Forum C
- Relance de realiser le jeu mastermind en c ✓ - Forum C
5 réponses
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
24 déc. 2009 à 16:50
24 déc. 2009 à 16:50
D'abord, corrigeons quelques erreurs:
- scanf("%s",&tab_proposition[4]) n'est pas correct, l'adresse du tableau est simplement: 'tab_proposition'.
- le tableau contiendra un caractère de fin ('\0') donc il aura une taille de 5.
- en outre, utiliser 'scanf' pour une chaîne de caractères est très dangereux, car il n'y a aucun contrôle de la longueur saisie.
Je ne vais pas répondre à ta question mais simplement faire quelques remarques pour simplifier ton programme:
- on ne fait pas de test du type: tab_proposition[i]!="V" & tab_proposition[i]!="v", on utilise la fonction 'toupper' (Ah en plus je m'aperçois que ta déclaration est fausse car tab_proposition[i] est un caractère que tu compares à une chaîne, il faut écrire 'V' et non "V"), le test devient: toupper(tab_proposition) != 'V'.
- personnellement, je ferais une déclaration du style:
#define NB_COULEUR 6
char couleur[NB_COULEUR][] = { "Rouge", "Vert", "Bleu", "Marron", "Orange", "Jaune" };
Ceci permet: de présenter à l'utilisateur des textes compréhensibles.
Pour l'utilisation, il y a deux solutions:
- Soit tu convertis les caractères saisis en chiffres, (0=R, 1=V, ...)
- Soit tu convertis les valeurs aléatoires en lettres (R=0, V=1, ...)
Ceci facilite les comparaisons.
Bonne réflexion.
- scanf("%s",&tab_proposition[4]) n'est pas correct, l'adresse du tableau est simplement: 'tab_proposition'.
- le tableau contiendra un caractère de fin ('\0') donc il aura une taille de 5.
- en outre, utiliser 'scanf' pour une chaîne de caractères est très dangereux, car il n'y a aucun contrôle de la longueur saisie.
Je ne vais pas répondre à ta question mais simplement faire quelques remarques pour simplifier ton programme:
- on ne fait pas de test du type: tab_proposition[i]!="V" & tab_proposition[i]!="v", on utilise la fonction 'toupper' (Ah en plus je m'aperçois que ta déclaration est fausse car tab_proposition[i] est un caractère que tu compares à une chaîne, il faut écrire 'V' et non "V"), le test devient: toupper(tab_proposition) != 'V'.
- personnellement, je ferais une déclaration du style:
#define NB_COULEUR 6
char couleur[NB_COULEUR][] = { "Rouge", "Vert", "Bleu", "Marron", "Orange", "Jaune" };
Ceci permet: de présenter à l'utilisateur des textes compréhensibles.
Pour l'utilisation, il y a deux solutions:
- Soit tu convertis les caractères saisis en chiffres, (0=R, 1=V, ...)
- Soit tu convertis les valeurs aléatoires en lettres (R=0, V=1, ...)
Ceci facilite les comparaisons.
Bonne réflexion.
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
24 déc. 2009 à 17:30
24 déc. 2009 à 17:30
le problème est que dans ma nouvelle fonction, elle ne reconnait pas tab_proposition et tab_ordi vu qu'elles se trouvent dans les autres fonctions
Tu as un problème de gestion de tes variables, il y a deux solutions... une bonne et une mauvaise; commençons par la mauvaise:
- déclarer les variables globales en dehors de toutes les fonctions; tout le monde (je parle des fonctions évidemment) a accès à toutes les variables,
et continuuons par la bonne:
- déclarer les variables locales dans le 'main' et utiliser le passage de paramètres vers les fonctions.
NB:une déclaration du type: char couleur[NB_COULEUR][] = { "Rouge", "Vert", ... }; doit rester globale.
Bonne continuation.
Tu as un problème de gestion de tes variables, il y a deux solutions... une bonne et une mauvaise; commençons par la mauvaise:
- déclarer les variables globales en dehors de toutes les fonctions; tout le monde (je parle des fonctions évidemment) a accès à toutes les variables,
et continuuons par la bonne:
- déclarer les variables locales dans le 'main' et utiliser le passage de paramètres vers les fonctions.
NB:une déclaration du type: char couleur[NB_COULEUR][] = { "Rouge", "Vert", ... }; doit rester globale.
Bonne continuation.
contrainte du professeur : Interdiction d'utiliser les variables globales...
J'ai lu qu'il était possible de passer la fonction en paramètre afin de l'utiliser dans d'autres fonctions.
Comment cela fonctionne t-il?
Merci
J'ai lu qu'il était possible de passer la fonction en paramètre afin de l'utiliser dans d'autres fonctions.
Comment cela fonctionne t-il?
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
24 déc. 2009 à 17:59
24 déc. 2009 à 17:59
Quand j'ai dit 'doit rester globale', j'aurais dû mettre 'préférable à rester globale'; ce n'est pas une obligation mais comme il s'agit en fait d'un tableau dont le contenu est constant, c'est mieux de le mettre en global mais tu peux le mettre dans le 'main'.
Passer les fonctions en paramètres ? Oui c'est possible mais ici je n'en vois pas la nécessité (il faut se méfier de l'usine à gaz !).
Dans le 'main':
- Déclaration des variables,
- Appel à une fonction de fabrication d'une combinaison que la fonction placera dans tab_combinaison qu'on lui aura donc passé,
- Appel 4 fois à une fonction de saisie qui contrôle un caractère saisi (donc passer le tableau des couleurs), la fonction retourne un caractère que l'on met dans un tableau tab_saisie.
- Appel à une fonction de comparaison qui devra connaître tab_combinaison et tab_saisie et qui retourne vrai ou faux,
- Si la réponse est 'faux', on redemande une saisie.
Tout est donc réalisé par des fonctions mais tout reste géré par le 'main'.
Bonne réflexion.
Passer les fonctions en paramètres ? Oui c'est possible mais ici je n'en vois pas la nécessité (il faut se méfier de l'usine à gaz !).
Dans le 'main':
- Déclaration des variables,
- Appel à une fonction de fabrication d'une combinaison que la fonction placera dans tab_combinaison qu'on lui aura donc passé,
- Appel 4 fois à une fonction de saisie qui contrôle un caractère saisi (donc passer le tableau des couleurs), la fonction retourne un caractère que l'on met dans un tableau tab_saisie.
- Appel à une fonction de comparaison qui devra connaître tab_combinaison et tab_saisie et qui retourne vrai ou faux,
- Si la réponse est 'faux', on redemande une saisie.
Tout est donc réalisé par des fonctions mais tout reste géré par le 'main'.
Bonne réflexion.