Salut donc j'ai essayé de après avoir compter le nombre de mots, de générer un nombre aléatoire, de me re-déplacer dans le fichier puis de construire une nouvelle chaîne avec le mot correspondant au nombre.Mais j'ai un soucis, j'ai essayé avec ça :
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 | #include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX_SIZE 4096
int randint(int min, int max)
{
int rand_is_seeded = 0;
if(!rand_is_seeded)
{
srand(time(NULL));
rand_is_seeded = 1;
}
return rand()%(max-min+1) + min;
}
int main(void)
{
FILE *fichier = fopen("test", "r");
char word[100][MAX_SIZE + 1]; /* 100 chaines de caracteres de taille MAX_SIZE*/
char motSecret[MAX_SIZE];
int i = 0, nb_mots = 0;
int n;
int j = 0;
int caractere = 0;
srand( time(NULL));
if(fichier != NULL)
{
for(nb_mots = 0; nb_mots < 100; nb_mots++)
if(fgets(word[nb_mots], MAX_SIZE, fichier) == NULL)
break;
n = randint(0, nb_mots-1);
printf("%d\n",n );
rewind(fichier);
for(j = 0; j < nb_mots; j++)
{
printf("Mot %d : %s\n", j, word[j]);
printf("n : %d | j : %d \n", n, j);
while(j != n)
{
if(fichier != NULL)
fgets(motSecret, MAX_SIZE, fichier);
printf("%s **\n",motSecret);
}
}
printf("%s\n",motSecret);
fclose(fichier);
}
return 0;
}
|
Mais ça me donne une boucle infinie :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | 3
Mot 0 : Maxime
n : 3 | j : 0
Maxime
**
DEUX
**
MAISON
**
INFLATION
**
IMMEUBLE
**
IMMEUBLE
**
..
|
J'ai essayé avec ça aussi :
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 | #include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX_SIZE 4096
int randint(int min, int max)
{
int rand_is_seeded = 0;
if(!rand_is_seeded)
{
srand(time(NULL));
rand_is_seeded = 1;
}
return rand()%(max-min+1) + min;
}
int main(void)
{
FILE *fichier = fopen("test", "r");
char word[100][MAX_SIZE + 1]; /* 100 chaines de caracteres de taille MAX_SIZE*/
char motSecret[MAX_SIZE];
int i = 0, nb_mots = 0;
int n;
int j = 0;
int caractere = 0;
srand( time(NULL));
if(fichier != NULL)
{
for(nb_mots = 0; nb_mots < 100; nb_mots++)
if(fgets(word[nb_mots], MAX_SIZE, fichier) == NULL)
break;
n = randint(0, nb_mots-1);
printf("%d\n",n );
rewind(fichier);
for(j = 0; j < nb_mots; j++)
{
printf("Mot %d : %s\n", j, word[j]);
printf("n : %d | j : %d \n", n, j);
while(fgets(motSecret, MAX_SIZE, fichier) != NULL)
{
printf("%s **\n",motSecret);
if(n == j)
break;
}
}
printf("%s\n",motSecret);
fclose(fichier);
}
return 0;
}
|
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 | 2
Mot 0 : Maxime
n : 2 | j : 0
Maxime
**
DEUX
**
MAISON
**
INFLATION
**
IMMEUBLE
**
Mot 1 : DEUX
n : 2 | j : 1
Mot 2 : MAISON
n : 2 | j : 2
Mot 3 : INFLATION
n : 2 | j : 3
Mot 4 : IMMEUBLE
n : 2 | j : 4
IMMEUBLE
|
Le problème est que ça exécute le while(fgets(motSecret, MAX_SIZE, fichier) != NULL) jusqu'à la fin et ensuite ça prend un nouveau tour de boucle for puis ça rentre dans le if en tout cas j'ai l'impression.
J'ai essayé aussi avec les chaînes de caractères, c'est mieux car j'ai le bon mot mais pas le mot complet :
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 <time.h>
#include <stdlib.h>
#define MAX_SIZE 4096
int randint(int min, int max)
{
int rand_is_seeded = 0;
if(!rand_is_seeded)
{
srand(time(NULL));
rand_is_seeded = 1;
}
return rand()%(max-min+1) + min;
}
int main(void)
{
FILE *fichier = fopen("test", "r");
char word[100][MAX_SIZE + 1]; /* 100 chaines de caracteres de taille MAX_SIZE*/
char motSecret[MAX_SIZE];
int i = 0, nb_mots = 0;
int n;
int j = 0;
int caractere = 0;
int compteur = 0;
srand( time(NULL));
if(fichier != NULL)
{
for(nb_mots = 0; nb_mots < 100; nb_mots++)
if(fgets(word[nb_mots], MAX_SIZE, fichier) == NULL)
break;
n = randint(0, nb_mots-1);
printf("%d\n",n );
rewind(fichier);
for(j = 0; j < nb_mots; j++)
{
printf("Mot %d : %s\n", j, word[j]);
printf("n : %d | j : %d \n", n, j);
while(caractere != EOF)
{
caractere = getc(fichier);
motSecret[j] = caractere;
printf("%s \n", motSecret);
if(caractere == '\n')
compteur++;
printf("compteur : %d | n : %d \n", compteur,n);
if(compteur == n )
break;
}
}
printf("%s\n",motSecret);
fclose(fichier);
}
return 0;
}
|
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 | 3
n : 3 | j : 0
M
compteur : 0 | n : 3
a
compteur : 0 | n : 3
x
compteur : 0 | n : 3
i
compteur : 0 | n : 3
m
compteur : 0 | n : 3
e
compteur : 0 | n : 3
compteur : 1 | n : 3
D
compteur : 1 | n : 3
E
compteur : 1 | n : 3
U
compteur : 1 | n : 3
X
compteur : 1 | n : 3
compteur : 2 | n : 3
M
compteur : 2 | n : 3
A
compteur : 2 | n : 3
I
compteur : 2 | n : 3
S
compteur : 2 | n : 3
O
compteur : 2 | n : 3
N
compteur : 2 | n : 3
compteur : 3 | n : 3
n : 3 | j : 1
I
compteur : 3 | n : 3
n : 3 | j : 2
IN
compteur : 3 | n : 3
n : 3 | j : 3
INF
compteur : 3 | n : 3
n : 3 | j : 4
INFL
compteur : 3 | n : 3
INFL
|
Je pense que le problème vient de ma boucle for mais je sais pas quoi mettre dans la condition comme je n'ai pas la longueur du mot
J'ai essayé avec i<10 pour tester, ça marche mais j'ai quelque chose de bizarre :
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 | 4
n : 4 | j : 0
M
compteur : 0 | n : 4
a
compteur : 0 | n : 4
x
compteur : 0 | n : 4
i
compteur : 0 | n : 4
m
compteur : 0 | n : 4
e
compteur : 0 | n : 4
compteur : 1 | n : 4
D
compteur : 1 | n : 4
E
compteur : 1 | n : 4
U
compteur : 1 | n : 4
X
compteur : 1 | n : 4
compteur : 2 | n : 4
M
compteur : 2 | n : 4
A
compteur : 2 | n : 4
I
compteur : 2 | n : 4
S
compteur : 2 | n : 4
O
compteur : 2 | n : 4
N
compteur : 2 | n : 4
compteur : 3 | n : 4
I
compteur : 3 | n : 4
N
compteur : 3 | n : 4
F
compteur : 3 | n : 4
L
compteur : 3 | n : 4
A
compteur : 3 | n : 4
T
compteur : 3 | n : 4
I
compteur : 3 | n : 4
O
compteur : 3 | n : 4
N
compteur : 3 | n : 4
compteur : 4 | n : 4
n : 4 | j : 1
I
compteur : 4 | n : 4
n : 4 | j : 2
IM
compteur : 4 | n : 4
n : 4 | j : 3
IMM
compteur : 4 | n : 4
n : 4 | j : 4
IMME
compteur : 4 | n : 4
n : 4 | j : 5
IMMEU
compteur : 4 | n : 4
n : 4 | j : 6
IMMEUB
compteur : 4 | n : 4
n : 4 | j : 7
IMMEUBL
compteur : 4 | n : 4
n : 4 | j : 8
IMMEUBLE
compteur : 4 | n : 4
n : 4 | j : 9
IMMEUBLE
compteur : 5 | n : 4
IMMEUBLE�
compteur : 5 | n : 4
IMMEUBLE�
|
J'ai un '?' à la fin du mot.
Désolé pour le pavé