Bonjour,
J'ai un entretien d'embauche la semaine prochaine dans une boite faisant de la programation embarque.
Je viens tout juste d'avoir mon diplome, je n'ai aucune experience dans ce domaine.
D'apres ce que j'ai lu, la gestion de la memoire est tres critique.

Voici un petit jeu du pendu que j'ai fait, je souhaiterai savoir quelles modification je peux y apporter.

Merci

PS: Si certains d'entre vous peuvent me donner quelques conseille general je suis preneur egalement. Merci

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h> //Include necessaire pour les E/S
#include <stdlib.h>
#include <ctype.h>
#include <time.h> //include necessaire pour la gestion du temps (rand-time)
#include <string.h>
#include "dico.h"
 
 
char* copiemodif(char* ,char* );
char lireCaractere();
int nombreAleatoire(int nombreMax);
 
 
int main(int argc, char* argv[])
{
	char essais = 10; //Variable definissan le nombre d'essais de l'utilisateur
 
	FILE* fichier = NULL; //Fichier dans lequel se trouve des mots que l'on va prendre au hasard et qu'il faudra trouver
	char _Buf[10] = ""; // Chaine de caracteres contenant un mot a trouver. par exemple "voiture"
	char resultat[10] = ""; // Chaine de caracteres affichant a l'ecran le mot a trouver  par exemple "v***ur*"(pour voiture)
 
	char* caractereRenvoye = NULL;
 
		/* L'ordinateur choisi un mot du fichier dico	*/	
	fichier = fopen("dico.txt", "r");//On ouvre un fichier en lecture uniquement
	if (fichier)//on verifie la validite de notre pointeur
	{
		int index = 0;
 
		while (fgets(_Buf, 10, fichier)) // Dans cette boucle, nous comptons le nombre de mots qui se trouvent dans le fichier
			++index;
		fseek(fichier, 0, SEEK_SET);// On replace le curseur a l'origine
		int indexeMot = nombreAleatoire(index); //On choisi un nombre au hasard inferieur ou egal au nombre de mots se trouvant dans le fichier
		index = 1; 
		do{			// cette boucle nous renvoie le mot corespondant au chiffre tombe par hasard, il est stocke dans _Buff
			fgets(_Buf, 10, fichier);
			index++;
		}while(index<indexeMot);
		copiemodif(resultat,_Buf); // fonction qui remplace chaque lettre du mot par le caractere '*'
		fclose(fichier);//Ferme le fichier
	}
 
	else
		printf("l'ouverture de dico.txt a echoue\n");
	/*	On interroge l'utilisateur	*/
	char c='*';
	while(essais && strcmp(_Buf,resultat)) //Tant que le nombre d'essais maximal n'est pas atteind, ou que le mot n'a pas ete trouve
	{
		char flag=0;
		printf("Vous avez %d essais\n",essais);
		printf("Veuillez entrer une lettre: ");
		c=lireCaractere();
		for (int i = 0; _Buf[i] != NULL; i++)
			if(_Buf[i] == c)
			{
				flag = 1;
				*(resultat +i) = _Buf[i];
			}
		if (!flag)//flag nous sert pour ne pas decrementer le nombre d'essai si l'utilisateur a entre une lettre valide
			essais--;
 
		printf("%s\n",resultat);
	}
 
	essais ? printf("Felicitation!!\n") : printf("Perdu!!\n") ;
	system("Pause");
	return 0;
}
 
 
 
/*	Fonctions necessaire a la realisation du pendu	*/
 
 
int nombreAleatoire(int nombreMax)
{
    srand(time(NULL));
    return (rand() % nombreMax);
}
 
char lireCaractere() 
{ 
    char caractere = 0;
 
    caractere = getchar(); // On lit le premier caractère
    caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
 
    // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer) 
    while (getchar() != '\n') ;
 
    return caractere; // On retourne le premier caractère qu'on a lu
 
}
 
char* copiemodif(char* resultat,char* _Buf)
{
	int i=0;
	char* tmp = &_Buf[0];
	for (i; *tmp != NULL;i++)
	{
		if (*tmp == '\n')
		resultat[i]='\n';
		else
			resultat[i]= '*';
		tmp++;
	}
	return resultat;
}