A voir également:
- Technique mastermind
- -HELP- Les MASTERMINDS ! ✓ - Forum Loisirs / Divertissements
- Pcs problème technique aujourd'hui ✓ - Forum Vos droits sur internet
- Un problème technique est survenu tf1 - Forum Montage et acquisition vidéo
- Revue technique evinrude gratuite - Forum Loisirs / Divertissements
- Pcs coupon déjà utilisé - Forum Consommation & Internet
2 réponses
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
15 mars 2012 à 20:57
15 mars 2012 à 20:57
Plusieurs conseils au préalable :
- attention à l'indentation : normalement quand on ouvre une accolade, on passe à la ligne. Certains passent à la ligne avant d'ouvrir une accolade, d'autres pas. Note que si ton environnement de développement est digne de ce nom, il devrait t'aider à indenter.
- attention aux notations : normalement seuls les constantes définies par #define sont écrites en majuscules. Normalement on note les variables comme ceci : ma_variable ou maVariable. Idem pour les fonctions : maFonction ou ma_fonction
- pour les types (structures) en général on les notes aussi en minuscules par exemple ma_structure. Personnellement je les postfixes "_t" : ma_structure_t. Sous windows les types sont parfois notés tout en majuscules (personnellement je trouve ça moche). Une notation inspirée des langages objets consiste à les faire commencer par une majucule, par exemple MaStructure.
- n'utilise jamais system(...) : c'est mal, car ça dépend du système sur lequel tu lances ton programme. Si écrire system("pause") a du sens sous windows, ce n'est pas le cas sous tous les autres systèmes (linux, mac etc...). Tu peux utiliser par exemple "getchar();" à la place
- attention au type de retour du main, que tu as oublié d'indiquer et qui est sensé être un int (0 si le programme s'est bien terminé, un code d'erreur sinon).
- pour compiler, active (et résous) tous les warnings.
- quand tu manipules un entier je t'invite à expliciter quand il s'agit d'un unsigned.
- dans la fonction menu, tu n'as pas de raison d'appeler x fois printf, tu peux écrire directement :
- je t'invite à donner des noms de variables parlant, une seule lettre généralement, c'est lisible sur le coup, mais rapidement ça devient le bazar :-)
- dans le mastermind, rien n'interdit deux fois la même couleur dans le code il me semble ;-)
- au niveau de choix(), tu devrais contrôler avec scanf si tu es parvenu ou non à lire un entier.
- évites les variables globales c'est une très mauvaise habitude de programmation !
- lors de l'appel de verifN et verifB tu passes en paramètre un entier non initialisé. En plus (cf cours sur le C), tu passes une recopie (qui ne sert à rien). Ainsi ces deux fonctions devraient plutôt ressembler à ceci :
Bonne chance
- attention à l'indentation : normalement quand on ouvre une accolade, on passe à la ligne. Certains passent à la ligne avant d'ouvrir une accolade, d'autres pas. Note que si ton environnement de développement est digne de ce nom, il devrait t'aider à indenter.
// Indentation 1 if(x == 1) { printf("%d\n", x); } // Indentation 2 if(x == 1) { printf("%d\n", x); }
- attention aux notations : normalement seuls les constantes définies par #define sont écrites en majuscules. Normalement on note les variables comme ceci : ma_variable ou maVariable. Idem pour les fonctions : maFonction ou ma_fonction
void ma_fonction(int ma_variable1, int ma_variable2) { int ma_variable3; //... }
- pour les types (structures) en général on les notes aussi en minuscules par exemple ma_structure. Personnellement je les postfixes "_t" : ma_structure_t. Sous windows les types sont parfois notés tout en majuscules (personnellement je trouve ça moche). Une notation inspirée des langages objets consiste à les faire commencer par une majucule, par exemple MaStructure.
- n'utilise jamais system(...) : c'est mal, car ça dépend du système sur lequel tu lances ton programme. Si écrire system("pause") a du sens sous windows, ce n'est pas le cas sous tous les autres systèmes (linux, mac etc...). Tu peux utiliser par exemple "getchar();" à la place
- attention au type de retour du main, que tu as oublié d'indiquer et qui est sensé être un int (0 si le programme s'est bien terminé, un code d'erreur sinon).
int main(){ //... return 0; }
- pour compiler, active (et résous) tous les warnings.
- quand tu manipules un entier je t'invite à expliciter quand il s'agit d'un unsigned.
- dans la fonction menu, tu n'as pas de raison d'appeler x fois printf, tu peux écrire directement :
printf( "ma ligne 1\n" "ma ligne 2\n" "ma ligne 3\n" //... );
- je t'invite à donner des noms de variables parlant, une seule lettre généralement, c'est lisible sur le coup, mais rapidement ça devient le bazar :-)
- dans le mastermind, rien n'interdit deux fois la même couleur dans le code il me semble ;-)
- au niveau de choix(), tu devrais contrôler avec scanf si tu es parvenu ou non à lire un entier.
- évites les variables globales c'est une très mauvaise habitude de programmation !
- lors de l'appel de verifN et verifB tu passes en paramètre un entier non initialisé. En plus (cf cours sur le C), tu passes une recopie (qui ne sert à rien). Ainsi ces deux fonctions devraient plutôt ressembler à ceci :
#include <stdio.h> #include <stdlib.h> typedef enum _couleur_t{ NOIR, BLANC, ROUGE, VERT, JAUNE, BLEU } couleur_t; unsigned compter_bien_places( const couleur_t *code, const couleur_t *proposition, size_t taille // 4 ) { unsigned i, num_ok = 0; for(i = 0; i < taille; i++) { if(code[i] == proposition[i]) num_ok++; } return num_ok; } int main(){ const size_t taille = 4; couleur_t code[taille]; couleur_t proposition[taille]; code[0] = NOIR; code[1] = BLANC; code[2] = ROUGE; code[3] = BLEU; proposition[0] = NOIR; proposition[1] = VERT; proposition[2] = ROUGE; proposition[3] = BLEU; printf("%d\n", compter_bien_places(code, proposition, taille)); return 0; }
Bonne chance