Bonjour a tous,

voila je poste car:

-Je pensais que vous pourriez m'aider.

-j'ai un problème, j'essaye de faire un petit programme qui crypte un message entrer par l'utilisateur et qui decrypte les messages mais mon problèmes n'est pas la. J'utilise la fonction scanf("%[^\n]s", chaine); mais elle ne fonctionne pas au moment de l'execution du programme.Je vous poste mon code plus bas.

-j'aimerais avoir des critiques et des conseils, plus au niveau du code que de mon programme et et de son utilité.

Voila mon code: (j'ai fait du mieux que j'ai pu pour le structurer...)
Merci d'avance.
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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
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[500];
	int cle, nb_car, cod, i=0;
	FILE* fichier_c = NULL; // fichier qui va contenir le message crypté.
 
	fichier_c = fopen("Message.txt", "w");
	fputs("Message:\n\n", fichier_c);
 
	printf("Entrer le message a crypter:\n");
	scanf("%[^\n]s", chaine); // c'est la que se situe mon problème.
	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);
}