Bonjour,
Voici mon programme ci dessous :
Ce qui me dérange est la chose suivante :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define taille_mot_secret 7 int main(void) { char mot_secret[] = "Bonjour"; char mot_rentrer_par_utilisateur[taille_mot_secret+1]; //+1 => reservation '\0' (carac fin chaine) int nombre_vie = 10; char lettre_utilisateur; // Initialisation du mot rentrer par l'utilisateur // ================================================================================== for (int i = 0; i < taille_mot_secret; i++) mot_rentrer_par_utilisateur[i] = '_'; mot_rentrer_par_utilisateur[taille_mot_secret] = '\0'; // ================================================================================== do { // Récupération saisie utilisateur // ========================================================================== printf("Entrer une lettre majuscule ou minuscule ?\n"); scanf("%c", &lettre_utilisateur); scanf("%*c"); // ========================================================================== // Vérification de la saisie utilisateur // ========================================================================== bool presence_lettre = false; for (int i = 0; i < taille_mot_secret; i++) { if (mot_secret[i] == lettre_utilisateur) { presence_lettre = true; mot_rentrer_par_utilisateur[i] = lettre_utilisateur; } } // ========================================================================== // Affichage en fonction de la présence de la lettre // ========================================================================== if (presence_lettre) printf("Votre lettre : %c est bien présente dans le mot : \"%s\"\n", lettre_utilisateur, mot_rentrer_par_utilisateur); else { nombre_vie--; printf("Votre lettre n'est pas présente, il vous reste %d vie\n", nombre_vie); } // ========================================================================== // Test de la victoire // ========================================================================== if (strcmp(mot_secret, mot_rentrer_par_utilisateur) == 0) { printf("vous avez trouvé le mot : \"%s\"", mot_secret); break; } // ========================================================================== } while (nombre_vie > 0); // Affichage lorsque plus de vie // ========================================================================== if (nombre_vie == 0) printf("Vous n'avez pas trouvez le mot : \"%s\"", mot_secret); // ========================================================================== return 0; }
Je suis obligé de passé par une directive de préprocesseur, c'est à dire, un #define taille_mot_secret 7 pour définir la taille du mot secret dans le tableau.
J'ai essayé de la faire dynamiquement, c'est à dire, de faire la chose suivante :
- supprimer le #define taille_mot_secret 7
- taille_mot_secret = strlen(mot_secret)
- mot_rentrer_par_utilisateur[taille_mot_secret + 1]
Ceci ne fonctionne pas car si j'ai bien compris car la taille d'un tableau ne peut être allouer que avant la compilation. Vous confirmez ?
Je pense qu'il faut passer par l'allocation dynamique de mémoire, mais je n'en suis pas encore la, dans mon apprentissage du langage C.
Sinon, connaissez vous une solution plus simple ?
Merci pour votre aide.
Partager