Problème programme codage/décodage code morse

Fermé
bibi-arnaud - 8 janv. 2008 à 10:50
 Pikina - 6 oct. 2010 à 15:19
Bonjour,

voila, je vous expose en quelques mot mon problème.
Je dois créer un programme de codage / décodage de code morse dont voici la source.


#include<stdio.h>
#include<string.h>


void saisie_m(char[],char[37][6],char[]);
void menu(char[],char[],char[37][6],int*);
void saisie_t(char[]);
int taille_mot(char[]);
void affiche_morse(char[],char[],char[37][6]);
void affich_t(char[],char[],int);
void help(char[37][6],char[]);



/******************************************************************************/
/*fonction affichant tout le tableau du code morse pouvant
etre code ou decode par ce programme*/

void help(char m[37][6],char t[])
{int i;
system("cls"); //à utiliser sous windows (efface l'écran)
//system("clear"); //à utiliser sous linux (efface l'écran)

for(i=0;i<37;i++)
{
printf(" %c : %s\n",t[i],m[i]);
}


}


/******************************************************************************/
/*fonction affichant le menu du programme*/

void menu(char c[],char t[],char m[37][6],int *k)
{
printf("\n\n\t\t\t* Le code morse *\n\n\n");
printf(" Vous desirez :\n\n");
printf("\t1 : Coder un texte en morse\n\n");
printf("\t2 : Decoder un texte morse\n\n");
printf("\t3 : Afficher le tableau du code morse\n\n");
printf("\t4 : Quitter le programme\n\n\n");
printf("\t\t\tFaites votre choix...\n");

switch(getchar())
{
case'1':saisie_t(c);
printf("\n voici - %s - code en morse\n\n",c);
affiche_morse(c,t,m);break;
case'2':saisie_m(c,m,t);
getchar();break;
case'3':help(m,t);
getchar();break;
case'4':*k=0;break;
default:printf("\a");
}
}


/******************************************************************************/
/*fonction permettant la saisie du texte*/


void saisie_t(char c[])
{
//system("cls"); //à utiliser sous windows (efface l'écran)
//system("clear"); //à utiliser sous linux (efface l'écran)
printf("\t\t\t* Codage d'un texte en morse *\n\n\n");
printf("\tVeuillez saisir votre phrase a coder en morse (200 caracteres max)\n\n -> ");
int size = strlen (c);
fgets(c, size, stdin);
}


/******************************************************************************/
/*fonction permettant la saisie du texte morse*/


void saisie_m(char c[],char m[37][6],char t[])
{
char z[1][6],x[200];
int i,k=0,ex,zb=1;

do{
system("cls"); //à utiliser sous windows (efface l'écran)
//system("clear"); //à utiliser sous linux (efface l'écran)
printf("\t\t\t* Decodage d'un texte morse *\n\n\n");
printf("\tSaisissez votre texte caractere par caractere\n\n");
printf("\tA l'affichage de la fleche => appuyer sur Entree pour continuer,\n\n");
printf("\tsur h pour afficher le tableau du code morse\n\n");
printf("\tou sur Esc pour quitter la saisie et afficher le texte \n\n\t\t(PS: // represente l'espace)\n\n\n\n");

printf("Saisir un caractere en morse : ");
fgets(z[0], sizeof(z[0]), stdin);


for(i=0;i<37;i++)
{
if(strcmp(z[0],m[i])==0){x[k]=i;k++;ex=1;i=37;}else{ex=0;}
}

if(ex==0){printf("\n\nCe caractere morse n'existe pas !");}

printf("\n =>\n\n\n");

switch(getchar())
{
case'H':
case'h':help(m,t);getchar();break;
case 27:zb=0;break;
}
}while(zb!=0);
printf("Voici votre texte decode : ");
affich_t(t,x,k); //appel à la fonction affichage qui va devoir nous afficher les valeurs de T X et K
}



/********************************************************************************/
/*fonction affichant le texte*/

void affich_t(char t[],char x[],int k)
{
int i;

for(i=0;i<k;i++)
{
printf("%c",t[x[i]]);
}

}



/********************************************************************************/
/*fonction calculant la taille d un mot ou texte*/

int taille_mot(char c[])
{
int i=0;
while(c[i]!='\0'){i++;}
return i;
}



/******************************************************************************/
/*fonction affichant le texte code en morse*/


void affiche_morse(char c[],char t[],char m[37][6])
{
int i,j,b=0;



for(i=0;i<taille_mot(c);i++)
{
for(j=0;j<37;j++)
{

if(c[i]==t[j])
{
if(c[i]==' '){printf(" ");}
if(j!=36){b++;}
if(b==12){printf("\n\n");}
printf("%s",m[j]);
if((c[i+1]!='\0')&&(c[i+1]!=' ')&&(c[i]!=' ')){printf(" / ");}
if(c[i]==' '){printf(" ");}
}

}

}
getchar();
}






/********************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/

/*ici se lance le programme*/


main()
{
char t[37]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r',
's','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0',
' '},
m[37][6]={{".-"},{"-..."},{"-.-."},{"-.."},{"."},{"..-."},{"--."},{"...."},{".."},
{".---"},{"-.-"},{".-.."},{"--"},{"-."},{"---"},{".--."},{"--.-"},{".-."},
{"..."},{"-"},{"..-"},{"...-"},{".--"},{"-..-"},{"-.--"},{"--.."},{".----"},
{"..---"},{"...--"},{"....-"},{"....."},{"-...."},{"--..."},{"---.."},{"---."},
{"-----"},{"//"}},c[200];

int i,k=1,j,n;

do
{
//system("cls"); //à utiliser sous windows (efface l'écran)
//system("clear"); //à utiliser sous linux (efface l'écran)
menu(c,t,m,&k);

}while(k!=0);
}


Le menu fonctionne, l'affichage du tableau du code morse aussi ainsi que le choix pour quitter (choix 3 et 4).
Or j'ai un problème avec les choix 1 et 2 qui correspondent aux parties de codage du texte en morse et du décodage du morse en texte. Lorsque je compile, je n'ai aucune erreur, mais lorsque j'execute le programme et que je choisi par exemple le choix numéro 1, il serait sensé me demander de taper mon texte, puis d'afficher mon texte en morse, or il saute l'étape où je dois saisir mon texte. Il m'affiche bien l'invite pour le faire, mais me mets directement voici ... codé en morse, et biensur il n'affiche rien vu que je n'est pu saisir mon texte.
Pour le choix 2 qui doit décodé du morse et le passer sours forme textuelle, il me met directement que le code morse n'existe pas, sans même que je n'est pu le sasir. J'ai beau lui donner de vrai mots en morse, il me mettra sans cesse que le code orse n'existe pas.

D'où pourrais provenir cette erreur ??

Viendrait t'elle du getchar qui pourrait ne prendre que 1 seul caractère en compte et non tout une chaîne ?
Du fgets, pourtant je lui est bien précisé de prendre la chaine de caractère C, qui a pour longueur celle définie après scannage de la chaîne de caractère tappée, ainsi qu'un stdin pour bien capter ce qui a été entré.

Je vous remercis d'avance pour votre aide.
A voir également:

2 réponses

eu...
0
Je t'aurais bien aider mais la je ne comprend rien
0