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 :

Affichage de lettre par le biais d'adresse


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 21
    Points
    21
    Par défaut Affichage de lettre par le biais d'adresse
    Bonjour, en classe on a fait un algorithme sur le découpage d'un mot.
    Afin de mieux comprendre, j'ai donc tenté de le faire correspondre dans un langage : le C en particulier.
    Cependant j'ai du me trompé quelque part , car dans ma boucle for finale, il m'affiche tout autre chose.

    Le but du programme est donc d'utilisé un record, et d'y reprendre dans deux zones l'adresse du début et de fin de chacun des mots.
    Alors que j'ai semble t'il les bonnes adresses, l'affichage ne correspond pas du tout.



    A partir de la ligne 105 se trouve ma boucle, cependant j'ai peut être commis une erreur ailleurs.
    Mais je n'arrive pas à la situé.

    Merci de votre aide, vincent.


    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct adr
    {
        char *ptrdebut;
        char *ptrfin;
    } ptr;
     
    int main()
    {
        char tab[]="Bonjour tout le monde monsieur";
        int i,j,k,l,nbr,flag ;
        ptr *ptrind;
     
        nbr = 0;
        printf("\nPhrase : %s\n",tab);
        l = sizeof(tab) - 1;
        flag = 0;
     
        for(i = 0; i <= l; i++)
        {
            if ((tab[i] != ' ') && (flag == 0))
            {
                nbr = nbr + 1;
                flag = 1;
            }
            else
            {
                if((tab[i] == ' '))
                {
                    flag = 0;
                }
            }
        }
     
    printf("\nLongueur de la phrase : %d", l);
    printf("\nNombre de mot         : %2d\n", nbr);
     
    j = 0;
    ptrind = malloc(nbr * sizeof(ptr));
    if (ptrind != NULL)
    {
        printf("\nallocation fonctionnel\n"); // affiche si l'allocation à fonctionner
        flag = 0;
        for (i = 0; i < l ; i++)
        {
            if ((tab[i] != ' ') && (flag == 0))
            {
     
                    //printf("%c, %d\n",tab[i], &tab[i]); // permettait l'affichage de la première lettre du mot
                    printf("%d - %c \n", &tab[i], tab[i]);
                    ptrind[j].ptrdebut = &tab[i];
                    flag = 1;
     
            }
            else
            {
                if ((tab[i] == ' ') && (flag == 1))
                {
                     //printf("%c, %d\n",tab[i - 1], &tab[i - 1]); // permettait l'affichage de la dernière lettre du mot
                     printf("%d - %c \n", &tab[i - 1], tab[i - 1]);
                     ptrind[j].ptrfin = &tab[i - 1];
                     j = j + 1;
                     flag = 0;
     
                }
            }
        }
    ptrind[j].ptrfin = &tab[i-1]; //allocation de la dernière adresse de la lettre du dernier mot
    printf("%d - %c \n", &tab[i - 1], tab[i - 1]);
     
    printf("\nAfficher la phrase complete : %s", tab);
    printf("\nAfficher mot a mot\n\n");
    /*
    for(i = 0; i <= nbr - 1; i++)
    {
       printf("Mot N°%d %d , %d\n",i + 1, ptrind[i].ptrdebut, ptrind[i].ptrfin );
    }
    */
    j = 0; //je calcule le premier indice de début du premier mot
    l = (int)(ptrind[j].ptrfin - ptrind[j].ptrdebut); //je calcule le premier indice de fin du premier mot
     
    for(i = 0; i <=  nbr - 1; i++) // boucle parcourant le record
    {
        printf("%2d - %2d  ", j, l);
        printf("Mot N%d : ", i + 1); // affichage du numéro de mot
        for(k = j; k <= l ; k++)  // boucle permettant de donner chacune des lettres d'un mot
        {
                printf("%c",tab[k]); //j'affiche la lettre à lettre sur une même ligne tant qu'on a pas fini le mot
     
        }
        printf("\n");
        j = j + (int)(ptrind[i].ptrfin - ptrind[i].ptrdebut) + (int)(ptrind[i + 1].ptrdebut - ptrind[i].ptrfin);
        //calcul me donnant donc l'indice de début par le biais des adresses des prochains mots
        l = j + (int)(ptrind[i + 1].ptrfin - ptrind[i + 1].ptrdebut);
        // me donne donc l'indice de fin par le biais des adresses
     
     
    }
     
        printf("\n%d\n",&tab); // adresse du tableau
    // Le problème se situe ici
    for(k= 0; k <= nbr - 1; k++)
    {
     
        printf("%2d - %2d  ", ptrind[k].ptrdebut, ptrind[k].ptrfin);
        printf("Mot N%d : ", k + 1); // affichage du numéro de mot
        for (i = (int)ptrind[k].ptrdebut; i <= (int)ptrind[k].ptrfin; i++)
        {
             printf("%c ", i);
        }
        printf("\n");
    }
     
     
    free(ptrind);
    }
     
        return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ne serait-ce pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * p;
    ...
        for ( p = ptrind[k].ptrdebut; p<= ptrind[k].ptrfin; p++)
        {
             printf("%c ", *p);
        }
    ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par diogene Voir le message
    Ne serait-ce pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * p;
    ...
        for ( p = ptrind[k].ptrdebut; p<= ptrind[k].ptrfin; p++)
        {
             printf("%c ", *p);
        }
    ?
    Effectivement, ce matin j'avais tester mais je n'avais pas déclarer ma variable en char. Je te remercie beaucoup. Une erreur de débutant malheureusement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/12/2011, 19h56
  2. [MySQL] affichage image bdd par adresse
    Par fasyr dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/10/2008, 19h10
  3. Affichage texte lettre par lettre
    Par Yami no tenshi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/09/2008, 13h22
  4. Réponses: 6
    Dernier message: 23/01/2007, 17h20
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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