IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème: Erreur introuvable.


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Problème: Erreur introuvable.
    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.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Remplace tous les scanf de lecture des nombres par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgets(buf, sizeof(buf), stdin);
    val = strtol(buf, NULL, 10);
    En général, les fonctions Xscanf sont très difficiles à utiliser, (voir l'abondance des posts à ce sujet).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Citation Envoyé par FOX19881
    Bonjour à tous et a toutes,

    [coupé]

    Merci de bien vouloir m'aider.
    Il te reste un '\n' dans le flux d'entrée après l'utilisation d'une fonction très mesquine (ce '\n' est ensuite avalé par le fgets() dans cryptage(), donc ton message à crypter est vide), c'est tout à fait normal. Cette fonction mesquine s'appelle scanf() et est située avant l'appel à la fonction cryptage(). Voilà pourquoi. A changer aussi par fgets() pour ne pas avoir de surprises.

    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Ok merci je vais essayer mais est-ce que ça va resoudre mon problème?
    parceque je voulais resoudre mon problème puis m'occuper du remplacement des scanf....et autres truc louches que j'ais faits.

    Encore merci.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    A ok merci beaucoup,

    j'essaye tout de suite ça!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup a vous deux,

    Mon problème est resolu!
    C'est la reponse que j'attendais Foobar1329!

    Merci.
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [IE]problème erreur
    Par kevinf dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/11/2005, 21h48
  2. Différence date .. problème #Erreur
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 15h04
  3. erreur introuvable-.---
    Par cyrill.gremaud dans le forum ASP
    Réponses: 3
    Dernier message: 22/09/2005, 08h42
  4. [LG]erreur introuvable
    Par kojima dans le forum Langage
    Réponses: 8
    Dernier message: 11/02/2005, 17h15
  5. [syntaxe] erreur introuvable
    Par JohnnyC dans le forum Outils
    Réponses: 2
    Dernier message: 29/04/2004, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo