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 :

Vigenère cryptographie en C, problème de manipulation des caractères [Débutant(e)]


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Vigenère cryptographie en C, problème de manipulation des caractères
    Salut je suis nouveau sur ce forum et débutant en C
    Voila mon problème :
    Je voudrais réaliser en c un programme qui permette de simuler un système de cryptage établi par Vigenère.
    D'abord, on saisit le texte en clair (une chaîne de caractères) puis la clé du message. Jusque là ça va, mais comment repérer chaque caractère de la chaîne pour lui appliquer individuellement une modification.
    Exemple : texte clair = Bonjour
    clé = cle

    texte clair : caractère n°1=b, caractère n°1, caractère n°3=n...etc
    de même pour la clé.

    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    je comprends pas trop la question mais pour accèder à un élément de type chaine de caractère on utilise son indice.

    MaChaine[0],MaChaine[n],...
    MaCle[0],MaCle[n],...

  3. #3
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Salut,

    pour completer la réponse précédente, comme apparament tu es débutant, en language C chaque mot est en fait un tableau qui comporte autant de case que de lettre + 1, qui est le signe de fin de chaine "\0". Donc pour reprendre ton exemple, si tu veux effectuer une modification sur chaque caractère, il te faudra surement faire une boucle for comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(i=0;i<sizeof(lemotatraiter);i++)
    {
    //tes instructions a effectuer
    }
    Bien sur, ceci n'est qu'un exemple qu'il faudra adapter à tes besoins.

    En tout cas bon courage.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Bonsoir,

    Citation Envoyé par Pahcixam
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(i=0;i<sizeof(lemotatraiter);i++)
    {
    //tes instructions a effectuer
    }
    [...]
    AMHA, une petite erreur s'est glissée dans votre exemple.
    Je suppose que vous souliez écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ( i=0 ; i < strlen( lemotatraiter ) ; i++ ) {
        // manipulation sur le caractère courant ( lemotatraiter[i] )
    }
    En n'oubliant pas un Cordialement,
    DS.

  5. #5
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    C'est vrai, escusez de l'erreur. Etant moi aussi débutant, il m'arrive un peu trop souvent de confondre des fonctions.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut,
    merci pour votre aide.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je voudrais avoir votre avis sur ce programme svp.

    ----------------------------------------------------------------------------
    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
     
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
     
    main()
    {
       char clair [10];
       char cle [10];
       char code[10];
       int i;
     
       printf("Saisissez le texte a coder\n");
       scanf("%c", clair);
       printf ("Saisissez la cle : ");
       scanf("%c", cle);
     
       for (i=0; i<=10; i=10)
          code[i]=clair[i]+cle[i];
     
       printf ("%c%c%c%c%c%c%c%c%c%c", code[1],code[2],code[3],code[4],code[5],code[6],code[7],code[8],code[9],code[10]);
       system("pause");
    }
    ---------------------------------------------------------------------------
    il ne fonctionne pas vraiment. En fait je voudrais saisir un texte clair puis une clé (deux chaînes de caractères). Ensuite je voudrais associer des entiers de 1 à 26 respectivement de a à z
    (a-->1, b-->2,...,z-->26).Puis ajouter la valeur entière de chaque lettre du texte clair à la valeur entière de la lettre correspondante de la clé.
    ainsi, pour chaque caractère code[i]=clair[i]+cle[i] (pour i<=10)
    enfin, je voudrais afficher les résultats, c-a-d code[1], code[2],...,code[10] sous forme de caractères.

    merci d'avance pour votre précieuse aide.

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Et la balise CODE ?

    %c pour saisir 1 caractère %s pour une chaine plus simple et sécurisé utilisez fgets pour saisir une chaine

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Bonjour,

    Citation Envoyé par cyberspy2999
    Je voudrais avoir votre avis sur ce programme svp.
    Ok. On est là pour ça.

    Citation Envoyé par cyberspy2999
    ----------------------------------------------------------------------------
    #include <stdio.h>
    #include <string.h>
    A priori, pas de soucis jusque là, si ce n'est la non utilisation de la balise CODE. Donc :
    Merci.

    Citation Envoyé par cyberspy2999
    #include <iostream>
    Cette ligne est dans le mauvais forum : c'est du C++, pas du C.


    Citation Envoyé par cyberspy2999
    main()
    Plutôt
    Citation Envoyé par cyberspy2999
    {
    char clair [10];
    char cle [10];
    char code[10];
    int i;
    Pourquoi limiter toutes les tailles à 10 ?
    Pourquoi une valeur fixe ?
    Et quand bien même vous souhaiteriez, aujourd'hui, que les longueurs du clair et de la clé soient fixées à 10 : utilisez des #define.
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #define LONGUEUR_MAX_CLAIR 10
    #define LONGUEUR_MAX_CLE 10
     
    int main (void) {
               char texteEnClair[ LONGUEUR_MAX_CLAIR + 1 ];
               char cleChiffrement[ LONGUEUR_MAX_CLE + 1 ];
               char texteChiffre[ LONGUEUR_MAX_CLAIR + 1 ];
               int i;
    Au passage, vous remarquerez :
    - que j'ai changé le nom de la variable "code" en "texteChiffre" car il me semble que c'est un nom plus précis que "code" (qui pourrait être "codé" sans accent ou "un code", soit l'équivalent, en langage courant, d'une clé) ;
    - le "+1" après l'utilisation des macros car une chaîne, en C, doit être terminée par un caractère '\0' terminal sous peine d'avoir des ennuis plus tard quand on voudra utiliser des fonctions standard (strlen() & Co.) ==> il faut donc prévoir de la place pour ce caractère supplémentaire.

    Citation Envoyé par cyberspy2999
    printf("Saisissez le texte a coder\n");
    Pour info, même si ce n'est pas grave, pas besoin de printf() ici puisque vous n'utilisez pas de chaîne de format. La fonction puts() suffit.

    Citation Envoyé par cyberspy2999
    scanf("%c", clair);
    La fonction scanf() n'est pas une fonction pour débutants car pas évidente à utiliser correctement et de façon sécurisée. Plutôt utiliser fgets() pour les saisies. De plus, si c'est une chaîne que vous voulez saisir, jetez un oeil à la remarque de notre cher hegros au sujet de votre "%c".

    Citation Envoyé par cyberspy2999
    printf ("Saisissez la cle : ");
    scanf("%c", cle);
    Mêmes remarques que précédemment, avec un supplément...
    Vous remarquerez que vous avez deux fois les opérations suivantes dans votre programme :
    - affichage d'une invite ;
    - saisie d'une chaîne.
    Plutôt que d'écrire deux fois la même suite d'instructions, profitez-en pour apprendre à écrire une fonction qui serve à cela (affichage d'une invite + saisie d'une chaîne).
    Vous auriez alors quelque-chose comme (en supposant que la saisie ne peut pas échouer) :
    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
    void saisieUtilisateur ( const char *inviteAAfficher, char *chaineASaisir, int tailleMaximaleChaineASaisir ) {
        /***
         * Mettre ici le code correspondant aux opérations suivantes :
         * - affichage de la chaine inviteAAfficher
         * - sasie d'une chaine de taille maximale tailleMaximaleChaineASaisir dans chaineASaisir
         */
    }
     
    int main( void ) {
     
        /* début du code ici */
     
        saisieUtilisateur( "Saisissez le texte à chiffrer : ", texteEnClair, LONGUEUR_MAX_CLAIR );
        saisieUtilisateur( "Saisissez la clé de chiffrement : ", cleChiffrement, LONGUEUR_MAX_CLE );
     
        /* reste du code ici */
    }
    Une fois cette fonction écrite, vous pourrez même la réutiliser dans d'autres programmes et ne plus avoir à vous embêter avec les saisies.

    Citation Envoyé par cyberspy2999
    for (i=0; i<=10; i=10)
    code[i]=clair[i]+cle[i];
    Au minimum, si vous êtes certain que le texte à chiffrer aura toujours la même longueur et que cette longueur sera toujours égale à celle de la clé, utilisez les macros (au lieu de "10") définies plus haut.
    Ensuite, si la longueur maximale du texte en clair est de 10, la condition n'est pas "i<=10" mais "i<10".

    Citation Envoyé par cyberspy2999
    printf ("%c%c%c%c%c%c%c%c%c%c", code[1],code[2],code[3],code[4],code[5],code[6],code[7],code[8],code[9],code[10]);

    Vous savez écrire une boucle ? Alors faites-le.

    Citation Envoyé par cyberspy2999
    system("pause");
    A priori, pas de problème ici.

    Citation Envoyé par cyberspy2999
    }

    ---------------------------------------------------------------------------
    main() doit renvoyer un entier. Il manque un "return" ou un appel à exit() (penser à inclure stdlib.h si vous voulez utiliser exit()).

    Citation Envoyé par cyberspy2999
    il ne fonctionne pas vraiment. En fait je voudrais saisir un texte clair puis une clé (deux chaînes de caractères). Ensuite je voudrais associer des entiers de 1 à 26 respectivement de a à z
    (a-->1, b-->2,...,z-->26).Puis ajouter la valeur entière de chaque lettre du texte clair à la valeur entière de la lettre correspondante de la clé.
    ainsi, pour chaque caractère code[i]=clair[i]+cle[i] (pour i<=10)
    enfin, je voudrais afficher les résultats, c-a-d code[1], code[2],...,code[10] sous forme de caractères.
    Ca c'est bien : vous avez commencé à écrire ce que vous vouliez faire et on y voit des étapes.
    Là, deux solutions : soit vous détaillez tout ça et vous codez ensuite, soit vous voulez commencer à coder tout de suite.
    Dans le second cas, vous pourriez par exemple commencer par écrire la fonction saisieUtilisateur() proposée plus haut. Après, on verra...

    Citation Envoyé par cyberspy2999
    merci d'avance pour votre précieuse aide.
    C'était un plaisir.
    Reste à voir si vous tiendrez le coup jusqu'à la fin

    Cordialement,
    DS.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut, j'ai avancé dans mon programme et j'ai réussi à crypter un message mais avec un nombre de lettres fixe pour le texte en clair et la clé

    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
     
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
     
    main()
    {
       int i;
       char clair [10];
       char cle [10];
       char code[10];
     
       printf ("CrYpToGrApHiE De ViGeNeRe\\n\n\n");
       printf("SAISISSEZ LE TEXTE A CODER:\n____________________________________________________________________________________\n\n");
       fgets(clair, sizeof clair, stdin);
       printf(".....................................................................................\n\n\n");
               printf ("SAISISSEZ LA CLE: \n____________________________________________________________________________________\n\n");
       fgets(cle, sizeof cle, stdin);
       printf(".....................................................................................\n\n\n");
       code[0]=(clair[0]-97+cle[0]-96)%26; //-97 et -96 pour  adapter au code ASCII et modulo 26 pour éviter que code[i] ne dépasse 26
       code[1]=(clair[1]+cle[1]-193)%26;
       code[2]=(clair[2]+cle[2]-193)%26;
       code[3]=(clair[3]+cle[3]-193)%26;
       code[4]=(clair[4]+cle[4]-193)%26;
       code[5]=(clair[5]+cle[5]-193)%26;
       code[6]=clair[6]+cle[6];
       code[7]=clair[7]+cle[7];
       code[8]=clair[8]+cle[8];
       code[9]=clair[9]+cle[9];
     
       printf ("LE MESSAGE CRYPTE EST:\n____________________________________________________________________________________\n\n %c,%c,%c,%c,%c\n.....................................................................................\n\n", code[0]+96,code[1]+96,code[2]+96,code[3]+96,code[4]+96,code[5]+96);
       system("pause");
    }
    C'est encore brouillon je sais; mais il y a une chose que je voudrais d'abord améliorer : je voudrais pouvoir entrer un texte puis faire que le programme compte le nombre de lettres qu'il comporte, pour ne crypter que les caractères saisis à l'écran (d'où le int i, où i devrait être cette valeur). Ensuite, je voudrais que le programme répète la clé si celle-ci est courte par rapport au texte clair :

    exemple : texte clair = SALUT
    clé = CLE ---> CLECL

    texte clair = BONJOUR
    cle=LA --> LALALAL


    Ensuite je voudrais appliquer le cryptage seulement aux lettres saisies :
    du style si i est le nombre de lettres du message et j un nombre entier
    code [j] = (clair[j]+cle[j]-193)%26;

    Je coderais ça comme ça :
    for (j=0;j<=i)
    code [j] = (clair[j]+cle[j]-193)%26;
    Y'a-til une erreur ???
    Une chose pour terminer : comment afficher les résultats c-a-d code [j] pour chaque valeur de j ?
    Merci d'avance de m'aider à peaufiner mon programme.
    @+

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    1. Pas du C.
    2. On t'a déjà dit le problème...

  12. #12
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Salut,

    juste dit en passant:

    Je coderais ça comme ça :
    for (j=0;j<=i)
    code [j] = (clair[j]+cle[j]-193)%26;
    Y'a-til une erreur ???
    Oui, la boucle for prend trois arguments, il faut que tu rajoute le dernier qui dit quoi faire une fois un tour réussi.

    J'écrirais donc:

    N'oublies pas de déclarer les variables avant de les utilisers.

    Sinon, pour le reste, je suis que trop peu expérimenté pour te dire les erreures.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Rebonjour ,
    me voila face à un autre problème (apparemment une erreur de segmentation). Pour pouvoir déterminer à chaque fois la longueur du message à coder, j'ai écrit les lignes de codes suivantes :
    --------------------------------------------------------
    int i; \\i est le nombre de caractères du texte
    printf("Choisir le nombre de lettres du texte à coder:");
    scanf("%d", nombre);
    int j;
    char clair [i];
    char cle [i];
    char code[i];
    --------------------------------------------------------
    Lorsque j'exécute le programme, il plante immédiatement après que j'aie entré la valeur de i

    Merci de jeter un ptit coup d'oeil sur mon problème

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par cyberspy2999
    Rebonjour ,
    me voila face à un autre problème (apparemment une erreur de segmentation). Pour pouvoir déterminer à chaque fois la longueur du message à coder, j'ai écrit les lignes de codes suivantes :
    --------------------------------------------------------
    int i; \\i est le nombre de caractères du texte
    printf("Choisir le nombre de lettres du texte à coder:");
    scanf("%d", nombre);
    int j;
    char clair [i];
    char cle [i];
    char code[i];
    --------------------------------------------------------
    Lorsque j'exécute le programme, il plante immédiatement après que j'aie entré la valeur de i

    Merci de jeter un ptit coup d'oeil sur mon problème
    Ou est-ce que tu entres i ? nombre est de type pointeur sur int et est alloué ?

    Il faut que tu essaies de prendre en compte les remarques dites plus haut notamment en ce qui concerne la balise [code] ca peut aider à y voir plus clair(en tout cas pour les lecteurs)

    merci

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Bonsoir,

    Citation Envoyé par hegros
    [...] Il faut que tu essaies de prendre en compte les remarques dites plus haut notamment en ce qui concerne la balise [code] ca peut aider à y voir plus clair(en tout cas pour les lecteurs) [...]
    Notamment, aussi, en ce qui concerne l'utilisation de scanf() quand on débute...

    Citation Envoyé par cyberspy2999
    me voila face à un autre problème
    Conseil : avant de se créer de nouveaux problèmes, commencer par régler les problèmes existants. Il ne faut pas imaginer qu'en accumulant les problèmes ils vont finir par s'annuler entre eux.

    Citation Envoyé par cyberspy2999
    (apparemment une erreur de segmentation).
    Apparemment ? Vous avez un doute ?

    Citation Envoyé par cyberspy2999
    Pour pouvoir déterminer à chaque fois la longueur du message à coder, j'ai écrit les lignes de codes suivantes :
    Ne faites pas confiance aux utilisateurs pour qu'ils saisissent toujours correctement la longueur d'un texte : comptez le nombre de caractères vous-même (la fonction strlen() est votre amie).
    Citation Envoyé par cyberspy2999
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
               int i;  \\i est le nombre de caractères du texte
               printf("Choisir le nombre de lettres du texte à coder:");
               scanf("%d", nombre);
               int j;
               char clair [i];
               char cle [i];
               char code[i];
    Les déclarations ne sont pas toutes au début.
    La variable "nombre" n'est pas déclarée.
    etc...
    Essayez de fournir du code compilable et

    Citation Envoyé par cyberspy2999
    Lorsque j'exécute le programme, il plante immédiatement après que j'aie entré la valeur de i
    La valeur de "i" ou la valeur de "nombre" ?
    Si il plante, c'est probablement parce-que vous avez fait quelque-chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i;
    scanf("%d",i);
    alors que le deuxième argument de scanf() devrait être un pointeur.

    Cordialement,
    DS.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut,
    je tiens d'abord à m'excuser de ne pas avoir utilisé plus tôt la balise [code], je viens de saisir le principe (je pensais qu'il s'agissait d'un élément du programme en C).
    Sinon, j'ai pris en compte vos conseils pour améliorer le programme, mais plusieurs problèmes persistent :

    -comment faire pour que la longueur de la chaîne de caractère à saisir ne soit pas fixe et que l'utilisateur du programme puisse taper un message sans se préoccuper de la longueur de la chaîne ? J'ai essayé de résoudre ce problème mais le programme me renvoit une erreur de segmentation (je n'ai pas saisi la remarque sur les pointeurs, pour l'instant je ne sais pas encore grand chose sur les pointeurs alors pourriez vous me montrer un exemple d'utilisation dans ce cas). Voila le code (cette fois sans confusions ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
               int i;  \\i est le nombre de caractères du texte
               char clair [i];
               char cle [i];
               char chiffre[i];
               printf("Choisir le nombre de lettres du texte à coder:");
               scanf("%d", &i); }
    -Ensuite, j'ai un problème concernant l'affichage des résultats. Voyez plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    \\début du programme + instructions (pas d importance)
     
    \\affichage des résultats
    printf ("le message chiffré est : %c%c%c%c", chiffre[0], chiffre[1], chiffre[2], chiffre[3]);
    Comment remplacer ce code pas très pratique pour que le programme affiche autant de lettres chiffrées que de lettres contenus dans le message en clair (logique, non ?)

    Voila, en espérant que vous vous pencherais sur mon ptit problème je vous remercie d'avance.
    @+

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Bonsoir,

    Citation Envoyé par cyberspy2999
    [...] j'ai pris en compte vos conseils pour améliorer le programme [...]
    J'ai bien peur que non.


    Citation Envoyé par cyberspy2999
    -comment faire pour que la longueur de la chaîne de caractère à saisir ne soit pas fixe et que l'utilisateur du programme puisse taper un message sans se préoccuper de la longueur de la chaîne ?
    Réponse déjà donnée dans un message précédent.

    Citation Envoyé par cyberspy2999
    J'ai essayé de résoudre ce problème mais le programme me renvoit une erreur de segmentation [...]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
               int i;  \\i est le nombre de caractères du texte
               char clair [i];
               char cle [i];
               char chiffre[i];
               printf("Choisir le nombre de lettres du texte à coder:");
               scanf("%d", &i); }
    Créer trois tableaux de caractères dont la longueur est saisie par l'utilisateur avant que l'utilisateur ne la saisisse, c'est comme gagner au loto sans avoir joué : je suis prêt à croire que cela soit possible dans un monde parallèle, mais pas dans le nôtre. L'erreur de segmentation semble me donner raison.

    Citation Envoyé par cyberspy2999
    -Ensuite, j'ai un problème concernant l'affichage des résultats. Voyez plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    \\début du programme + instructions (pas d importance)
     
    \\affichage des résultats
    printf ("le message chiffré est : %c%c%c%c", chiffre[0], chiffre[1], chiffre[2], chiffre[3]);
    Comment remplacer ce code pas très pratique pour que le programme affiche autant de lettres chiffrées que de lettres contenus dans le message en clair (logique, non ?)
    Oui, c'est logique...et la réponse à cette question a été donnée dans un message précédent.

    Si un des messages précédents n'a pas été compris :
    1. citer le passage qui n'a pas été compris ;
    2. poser une question à propos de ce passage.

Discussions similaires

  1. WCF probléme de manipulations des objets
    Par mcmaxis dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 06/10/2010, 09h23
  2. Réponses: 1
    Dernier message: 08/05/2008, 14h28
  3. Réponses: 3
    Dernier message: 15/04/2008, 11h34
  4. problème de manipulation des Long
    Par nouknouk dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2007, 13h51
  5. [FLASH MX2004] Problème de reconnaissance des caractères
    Par Spikefreeman dans le forum Flash
    Réponses: 10
    Dernier message: 04/01/2005, 23h08

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