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 exo morse


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut Problème exo morse
    Bonjour à tous et merci pour votre aide.

    J'ai un petit soucis sur mon traducteur de code morse.

    Le case1 traduit du Francais en Morse et il marche.
    Le case2 traduit du Morse en Francais et il me dit n'importe quoi.

    Je patoge un peu dans les pointeurs et je me mélange. Quelqu'un pourrait m'aider à rendre ce programme fonctionnel ?

    Merci
    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
    # include <stdio.h>
    # include <string.h>
    # include <conio.h>
    # define TAILLE 37
     
    int main(){
     
    	struct code{
    		char lettre;
    		char *morse;
    	};
     
    	struct code table [TAILLE]={
    		{'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',"--.."},   {'.',".-.-.-"},
    		{'0',"-----"},  {'1',".----"},  {'2',"..---"},
    		{'3',"...--"},  {'4',"....-"},  {'5',"....."},
    		{'6',"-...."},  {'7',"--..."},  {'8',"---.."},
    		{'9',"----."}
    	};
     
    	char ligne[81], car[6], *d, *f, k=0;
    	int i, j, g=0, test=1, a, longligne;
     
    	printf("******************\n");
    	printf("*Traducteur Morse*\n");
    	printf("******************\n");
    	printf("\n1. Francais => Morse");
    	printf("\n2. Morse => Francais");
    	printf("\n0. Quitter");
    	printf("\n\n-> ");
     
    	do{
    		switch(getch()){
     
    			case '1':
    				printf("\n\n-> : ");
    				fgets(ligne, sizeof ligne, stdin);
    				fclean(ligne, stdin);
    				printf("\n=> : ");
     
    				strupr(ligne);
     
    				longligne=strlen(ligne);
     
    				for (i=0;i<longligne;i++){
    					j=0;
    					while (ligne[i]!=table[j].lettre && j++<TAILLE-1);
     
    					if (j<TAILLE) printf("   %s", table[j].morse);
    					else printf("   ??????");
     
    					if (!((i+1)%10)) printf("\n     ");
    				}
    			break;
     
    			case '2':
    				printf("\n\n-> : ");
    				fgets(ligne, sizeof ligne, stdin);
    				fclean(ligne, stdin);
    				printf("\n=> : ");
     
    				d=ligne;
    				f=ligne;
     
    				while((*f!=' ') && (*f!=0)) f++;
     
    				for (i=0;ligne[i]!='\0';i++){
    					strncpy(car, d, (f-d));
     
    					do{
    						a=strcmp(car, table[g].morse);
    						g++;
    					}while(a==0);
     
    					if(a==1) printf("%c", table[g].lettre);
    					else printf(" ?????? ");
    				}
    			break;
     
    			case '0': test=0;
    			break;
     
    			default: printf("\n\nEntrez 1 ou 2");
    			break;
    			}
    	}while(test==1);
     
    	return 0;
    }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bonsoir,
    1. main() retourne un int. Toujours.
    2. Ça fait beaucoup de variables à une lettre, ça...
    3. Il ne faut jamais utiliser gets().
    4. L'indentation après le premier while me parait très suspecte, puisqu'il y a un point-virgule derrière le while...
    5. Tout le code est dans le main(), c'est horrible. Tu devrais le séparer en plusieurs fonctions, ce sera plus facile à comprendre aussi bien pour nous que pour toi.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Par défaut
    Il manque un caractère à ta variable car pour le zéro binaire de fin de chaine:

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Merci pour votre rapidité !
    J'ai corrigé la taille de car[6] (j'avais oublié ce '\0').

    Je débute et sur les conseils d'un ami j'ai mis ce while bizarre sans instructions... Mais que fait-il alors ?

    Que puis-je utiliser à la place de gets ?

    Merci merci

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le while bizarre sert à régler j à la valeur désirée. Les instructions qui le suivent ne doivent pas être indentées par rapport à lui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Merci encore ^^

    Pouvez-vous faire en sorte que mon petit programme marche ?
    Que mettre à la place de ce gets déprécié ?

    Merki

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    fgets() + la fonction fclean() du forum (une petite recherche te permettra de la trouver facilement)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Problème exo L2
    Par Vertical001 dans le forum Scilab
    Réponses: 2
    Dernier message: 15/03/2015, 12h07
  2. [eXo Portal] Problème eXo Knowledge
    Par Nayoko dans le forum Portails
    Réponses: 0
    Dernier message: 09/06/2010, 10h20
  3. problème avec un exo
    Par frost80500 dans le forum C#
    Réponses: 11
    Dernier message: 19/11/2007, 11h00
  4. problème exo algorithme
    Par greg96 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 17/06/2007, 15h25

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