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 :

compilation ok mais mal execution


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut compilation ok mais mal execution
    je veut prendre des extraits d un texte et les affecter a des variables
    texte=AZERTYUIOPQSDFG
    C1=AYQ
    C2=ZUS
    C3=EID
    etc....
    voila le code en C
    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
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    #define n 500
    void main()
    {
    char split(char mt[n],int indice);
    void decale(char t[n]);
    char c1[83];
    int f,len;
    char txt[n]="KIIFSIRV A E NEEF HJYKR SPFCVI GI KRVMMSYI XSLC HZ ZVAX YI EBVY IJGUPM JR HZGYNMIE RH QDPZRY YI C RUPMEBBZ HV PIOXV NRIIV RX KIEQEIXCRUPIC YI WEIBQZXIR XJQSN E NIGG GZRK QMS QZYPDQVGVZW TR JPX LASPVRTEI WRAW DRKRVHMKGIIGV DYD HLEE YY UVB CYZG EP ZZAKO GZAU HEIF PZWINZVKVF UP MC CVJHLVWDX WHVZRK VQHIEFIN IE NQZVZDYZ IE RYMSGR II EJVINYI HRZ DFAI GEITI YI UVB CYZG GZRKF QDPCRW LYZ FI YIJFMIEZGSWPZDYZQVAX V P VDYVXVHV YIGHMN PV GVZRKR GDRHHMZQV CEMECYIGI EBVYNLFUP EL DYVVRAXDIDR TVVRYPZPV FYY0000";
    decale(txt);
    printf("\n");
    printf("****Le texte crypte sans espaces****\n");
    printf(txt);
    len=strlen(txt);
    printf("\n*****Il est de longueur %d :*****",len);
    printf("\n\n*****On construire une matrice 5*n et son affichage*****\n");
    for(f=1;f<6;f++)
    {
    c1[83]=split(txt,1);
    printf("\nc%d=%s",f,c1);
    }
    getch();
    }
    void decale(char t[n])
    {
    int i,l,j;
    l=strlen(t);
    for(i=0;i<l;i++)
    	if(t[i]==' ')
    		for(j=i;j<l;j++)
    			 t[j]=t[j+1];
    }
    char split(char mt[n],int indice)
    {
    int i;
    char c[83];
     
     for(i=0;i<83;i++)
    	 {c[i]=mt[indice];
    	 indice=indice+5;}
     return (c[83]);
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Il y a un problème avec la fonction split.

    La déclaration est OK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char split(char mt[n],int indice);
    Mais l'utilisation n'est pas nette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* tableau de 83 caractères */
    char c1[83];
    /* assignation du 84e caractère du tableau ! */
    c1[83]=split(txt,1);
    Qu'est sensée faire la fonction split ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    faire ça:
    texte=AZERTYUIOPQ SDFG
    C1=AYQ
    C2=ZUS
    C3=EID
    etc...

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    y a rien

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par michall Voir le message
    faire ça:
    texte=AZERTYUIOPQ SDFG
    C1=AYQ
    C2=ZUS
    C3=EID
    etc...
    J'ai bien compris le but du programme, ma question portait sur la fonction split...

    D'après ce que je lis, j'ai l'impression que split est sensée extraire un caractère sur 5 à partir du caractère 'indice'.
    Or en C, il est impossible de renvoyer un tableau directement, il faut donc ruser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char *split(char source[n], int indice)
    {
        char *result = malloc(n/5+1);
        if(NULL != result) {
            int i, j;
            for(i = indice, j = 0; i < n; ++j, i+=5) {
                result[j] = source[i];
            }     
            result[j] = '\0';   
        }
        return result;
    }
    Et à l'utilisation, ne pas oublier le free :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    /* declaration */
    char *c;
    /* remplissage */
    c = split(txt, ...);
    if(c != NULL) {
        /* affichage */
        printf("%s", c);
    }
    /* libération */
    free(c);
    ...

  6. #6
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Points : 77
    Points
    77
    Par défaut
    ça t retourne pas un seul caractere ta split là?
    donne le resultat de ton programme

Discussions similaires

  1. Paquetage bien compilé mais non executé.
    Par Flodelarab dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/12/2008, 20h23
  2. Réponses: 8
    Dernier message: 24/08/2007, 11h18
  3. Réponses: 6
    Dernier message: 04/07/2006, 10h36
  4. Réponses: 4
    Dernier message: 08/01/2006, 18h26
  5. Réponses: 3
    Dernier message: 05/06/2005, 01h52

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