rama340
Messages postés16Date d'inscriptiondimanche 4 avril 2010StatutMembreDernière intervention30 novembre 2012
-
28 nov. 2012 à 21:41
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
29 nov. 2012 à 13:31
bonsoir,voici mon petit programme qui représente le chiffrement de césar; le programme bugs en exécution et je ne sais pas pour quoi! . Quelqu'un pouvez maider ?
merci d'avance.
*****************
#include<stdio.h>
#include<string.h>
void remplire(char tab_cesar[],int n){
int j;
tab_cesar[0]='A';
for(j=1;j<27;j++)
tab_cesar[j]= tab_cesar[j]+1;
}
main(){
char Tab_msg[80];
char Tab_cesar[27];
int i,j,n,k;
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 28 nov. 2012 à 22:11
Bonsoir,
Il bug peut-être, mais ce n'est pas un bug de :
Forum > CodeS-SourceS > A propos des sites CodeS-SourceS > Un bug sur CodeS-SourceS
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 29 nov. 2012 à 13:31
Bonjour.
Plusieurs soucis:
- main() => int main(void)
- Tu oublies d'incrémenter i
- Pour savoir jusqu'où itérer sur ta boucle principale, récupère la taille de Tab_msg via strlen, plutôt que de rechercher un '.'
- Le message "votre message est non correct" s'affiche pour chaque caractère ! Il ne devrait pas s'afficher du tout. Un caractère qui n'est pas entre a-zA-Z devrait être laissé tel quel.
- "if((Tab_msg[ i]>=65) && (Tab_msg[ i]<=90))" peut s'écrire "if((Tab_msg[ i]>='a') && (Tab_msg[ i]<='z'))"
Au niveau du code, on a vraiment l'impression que tu mets bout à bout des morceaux que tu ne comprends pas (méthode inutilisée, inversion de variables).
Au niveau de la technique, un seul tableau, et une seule boucle suffisent ! Il te suffit de directement modifier le tableau donné par l'utilisateur. Le tableau avec 27 éléments ne sert à rien (pourquoi 27 et pas 26 d'ailleurs ? Ça n'a pas de sens).
En voyant ceci: "Tab_cesar[ j + k] % 26", on sent que tu ne maîtrise pas ton sujet. (Tu confonds avec (tab_cesar[ j ] + k) % 26). Je pourrais certe, t'écrire une solution élégante (en très peu de ligne), mais ça ne t'aiderait pas. À la place je vais t'écrire le squelette du programme, que je vais te laisser compléter.
Je t'invite à revoir les tableaux et ce qu'est la table ASCII.
#include <stdio.h>
#include <string.h>
void clearBuffer()
{
char ch = 0;
while ((ch = getchar()) != EOF && ch != '\n')
;
}
void cesar(char* msg, int shift)
{
int i = 0;
int size = strlen(msg);
while (i < size)
{
/* A compléter */
++i;
}
}
int main(void)
{
char msg[64] = {0};
int shift = 0;
printf("Entrez le decalage: ");
scanf("%d", &shift);
clearBuffer();
printf("Entrez votre message: ");
scanf("%[^\n]s", msg);
cesar(msg, shift);
printf("Votre nouveau message est: %s\n", msg);
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question