Bonjour à tous et a toutes,

je suis desolée mais je reposte pour le meme problème que la dernière fois.
(J'ai quand meme apporté quelque modifications en remplacent scanf par fgets, à l'endroit du problème...enfin je crois.). et le problème persiste....

Je recapitule:
J'ai fait un petit programme de "chiffrement" de données.

Mon programme est composée de 3 fonctions:
-main
-cryptage()
-decryptage()

Voila, je n'ai aucun message d'erreur en compilant mon programme(que se soit avec visual c++ ou avec gcc).
Je n'ai pas non plus de message d'erreur a l'execution mais lorsque je lance mon programme et que je choisis "cryptage" (je sais qu'on dit dit chiffrement mais j'ai pas encore modifié mon code donc...)
Le programme devrait me demander d'entrer mon message puis me demander d'entrer la cle mais il me demande directement d'entrer la cle....

Je precise que lorsque je compile ma fonction cryptage() seul, je n'ai pas ce problème... mais des que je compile le programme entier...

Voila ma fonction cryptage() et mon programme entier:

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
 
void cryptage() {
char chaine[TAILLE] = {0};
	int cle, nb_car, cod, i=0, c;
	FILE* fichier_c = NULL; // fichier qui va contenir le message crypté.
	char *p = NULL;
 
	fichier_c = fopen("Message.txt", "w");
	fputs("Message:\n\n", fichier_c);
 
	printf("Entrer le message a crypter:\n");
	fgets(chaine, TAILLE, stdin);
	p = strchr(chaine, '\n');
	if (p == NULL) {
		printf("ERREUR");
		while((c = getchar()) != EOF && c != '\n');
	}
	do {
	printf("Entrer la cle de cryptage: nombre positif < 256.\n");
	scanf("%d", &cle);
	} while((cle > 255) || (cle < 1));
 
	nb_car = strlen(chaine);
	fprintf(fichier_c, "%d ", nb_car); /* J'inscris le nombre de caractères dans
									  le fichier pour le connaitre au moment du
									  decryptage (il me servira dans ma boucle
									  de decryptage). */
	while (i < nb_car) {
		cod = chaine[i] ^ cle; // Je me sert du XOR pour trouver la valeur de cod.
		fprintf(fichier_c, "%d ", cod);
		i++;
	}
 
	fputs("//", fichier_c); // Ca ne sert à rien.
	fclose(fichier_c);
	printf("Fin du cryptage.\n");
}

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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE 500
 
void cryptage();
void decryptage();
 
int main() {
	int rep;
	printf("Entrez le chiffre corespondant a votre choix:\n");
	printf(" 1 . CRYPTAGE.\n");
	printf(" 2 . DECRYPTAGE.\n");
	scanf("%d", &rep);
 
	switch(rep) {
		case 1 :
			cryptage();
			break;
		case 2 :
			decryptage();
			break;
		default:
			printf("Erreur de choix, relancer le programme.\n");
	}
 
system("pause");
return 0;
}
 
void cryptage() {
char chaine[TAILLE] = {0};
	int cle, nb_car, cod, i=0, c;
	FILE* fichier_c = NULL; // fichier qui va contenir le message crypté.
	char *p = NULL;
 
	fichier_c = fopen("Message.txt", "w");
	fputs("Message:\n\n", fichier_c);
 
	printf("Entrer le message a crypter:\n");
	fgets(chaine, TAILLE, stdin);
	p = strchr(chaine, '\n');
	if (p == NULL) {
		printf("ERREUR");
		while((c = getchar()) != EOF && c != '\n');
	}
	do {
	printf("Entrer la cle de cryptage: nombre positif < 256.\n");
	scanf("%d", &cle);
	} while((cle > 255) || (cle < 1));
 
	nb_car = strlen(chaine);
	fprintf(fichier_c, "%d ", nb_car); /* J'inscris le nombre de caractères dans
									  le fichier pour le connaitre au moment du
									  decryptage (il me servira dans ma boucle
									  de decryptage). */
	while (i < nb_car) {
		cod = chaine[i] ^ cle; // Je me sert du XOR pour trouver la valeur de cod.
		fprintf(fichier_c, "%d ", cod);
		i++;
	}
 
	fputs("//", fichier_c); // Ca ne sert à rien.
	fclose(fichier_c);
	printf("Fin du cryptage.\n");
}
 
void decryptage() {
	int cle, nb_car, cod, decod, i=0;
	FILE* fichier_c = NULL; // message crypté.
	FILE* fichier_d = NULL; // message decrypté.
	fichier_c = fopen("Message.txt", "r");
	if (fichier_c == NULL) {
		printf("Message crypte non trouve.\n");
		printf("Fin du programme.\n");
		system("pause");
		exit(0);
	}
	fichier_d = fopen("Message_clair.txt", "w");
 
	printf("Entrer la cle de decryptage:\n");
	scanf("%d", &cle);
 
	fputs("Message clair:\n\n", fichier_d);
	fseek(fichier_c, 9, SEEK_SET); /* Le "curseur" se place dans le fichier a decrypté,
								   la ou se trouve le nombre de caractères du message
								   qui est suivi par le debut du message codé. */
	fscanf(fichier_c, "%d", &nb_car);// nb_car prend le nombre de caractères.
 
	while(i < nb_car) {
		fscanf(fichier_c, "%d", &cod);
		decod = cod ^ cle; // XOR pour retrouver le caractère de départ.
		fprintf(fichier_d, "%c", decod);
		i++;
	}
	printf("Fin du decryptage.\n");
 
	fclose(fichier_c);
	fclose(fichier_d);
}
Merci de bien vouloir m'aider.