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 :

Concatenation de chaines


Sujet :

C

  1. #21
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Rydley
    Bonjours à tous.

    Voila, je suis débutant dans la programmation et dans le language C et j'ai un petit problème sur un exercice que j'ai à faire.

    Le but de l'éxerice est de copier plusieur fois le même mot à la suite, le mot etant fournis par l'utilisateur ainsi que le nombre d'occurence.
    Par exemple, si l'utilisateur rentre le mot "programmation" et le nombre "5", le programme devra alors afficher:
    "programmationprogrammationprogrammationprogrammationprogrammation".
    J'ai essayé de le faire avec la commande strcat dans une boucle for mais sa ne marchait pas. Je voudrais savoir si quelqu'un savait comment faire.
    Voila, merci .
    Si le but est de faire que de l'affichage, alors une simple boucle sur un printf suffit. Non ? Ou bien je n'ai pas compris la question ?

  2. #22
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    Si je vois dans l'entête d'une fonction :

    "Utilise les variables i, p..."
    Pourquoi y aurait-il ça ? Les variables locales n'ont qu'un intérêt ... 'local' dont le nom doit suffire pour expliquer leur rôle si il n'est pas évident au premier coup d'oeil.

    Par contre si c'est pour expliquer que la fonction agit par effet de bord sur des globales (aka procédures d'un autre age), je sors mon lance-flamme (sauf cas très particuliers et parfaitement documentés).
    mais c'est souvent associé à d'autres pratiques beaucoup plus douteuses (mettre des variables globales ou des include ou define au beau milieu d'un module, etc...).
    Pas de problème pour le Miel et les Fourmis Rouges.

    A part qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    {
    #define xxx ceci
    /* ... */
    #undef xxx
     
    /* ... */
     
    #define xxx cela
    /* ... */
    #undef xxx
    }
    me va tout à fait, toujours au nom de la réduction de la porté au minimum (ça peut aussi s'appliquer aux macros).

  3. #23
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Spootnik
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    *retour = 0;
    // et
    retour[0] = 0;
    // ou peut-être plutôt
    retour[0] = '\0';
    ça revient au même non ?
    Oui, mais en tant que vieil écolo recycleur depuis plus de 35 ans, j'utilise le moins de bits possibles.
    me va très bien.

  4. #24
    Membre émérite Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Par défaut
    simple question d'habitude…

  5. #25
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pas de problème pour le Miel et les Fourmis Rouges.

    A part qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    {
    #define xxx ceci
    /* ... */
    #undef xxx
     
    /* ... */
     
    #define xxx cela
    /* ... */
    #undef xxx
    }
    me va tout à fait, toujours au nom de la réduction de la porté au minimum (ça peut aussi s'appliquer aux macros).
    Oui avec ça pas de problème, mais j'ai déjà vu (et malheureusement pas qu'une fois) la chose suivante (modules de 1000 ou 2000 lignes) :

    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
     
    ........
    ........
        /* déjà à la moitié du module */
     
    ...
    int toto ( void )
    {
    }
    ...
     
    #include "MonInclude.h"
     
    int toto1 ( void )
    {
    }
     
    ......
     
    int Ma_Variable ;
     
    int toto3 ( void )
    {
    }
    ....
     
     
    #define MA_VARIABLE_DEFINE
     
    int toto4 ( void )
    {
    }
     
    ....
    et malheureusement pas simplement quelques fois......(voir le code original de HTTP, le code de MPEG1 de mpeg.org, entre autres....)


    Donc juste pour les gens peu expérimentés, je pense qu'il vaut mieux être TRES clair, même si le langage permet beaucoup de choses... :-)

    Parce qu'après, ben reprend un code comme ça, et tu finis par t'arracher les (quelques à notre âge ;-) ) cheveux ....

  6. #26
    Membre averti
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    salut tout le monde.
    Grace aux conseils que vous m'avez donné hier, j'ai reussi à faire mon programme. Mais j'ai une erreur à la compilation.
    Voici mon code( un peu long j'avou):
    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
    #include <iostream>
    using namespace std;
    
    int dupliqueMot(int *nbPoss,char *retour[], char mot[], int *nbOcc){
        
            int cpt=0;
            int taille;
            int resul=0;
        
        while (mot[cpt]!='\0')// cette boucle calcul la place que prend la chaine que veut creer l'utilisateur
        {                    // c'est a dire la suite de mots.
              cpt++;
        }
        taille=cpt*(*nbOcc);
        
        if (taille<=30) {             // si la suite est assez petite pour rentrer dans le tableau
        
        *retour[0] = '\0'; 
        for (int i=0; i<*nbOcc; i++) // on rentre dans la boucle for qui  effectue la suite des mots.
    {   
        
        strcat(*retour, mot);
        
        
    }
        return 0;
        
                       }
                       
        else {                         //si la suite est trop grande pour rentrer dans le tableau
        
        
        do
        {                              // on rentre dans la boucle do while qui calcul le nombre d'occurence possible
        resul=cpt*(*nbPoss);             // que l'on peut mettre dans le tableau
        nbPoss++;
        }
        while (resul<=30);
        
       *retour[0] = '\0';              // le tableau retour est un tableau vide ou l'on va stocker la chaine.
    for (int i=0; i<*(nbPoss-2); i++)
    {   
        
        strcat(*retour, mot);
    }
        return 1;
    
             }
             }
    
    
    int main(){
        
        
        char resultat[30];
        char MotVoulu[20];
        int nombreVoulu=0;
        int nombreObtenu=0;
        int x;
        
        printf("quelle mot voulez-vous dupliquer? : ");
        gets(MotVoulu);
        printf("combien d'occurences voulez-vous?:");
        scanf("%ld", &nombreVoulu);
        
        x=dupliqueMot(&nombreObtenu, &resultat[], MotVoulu[], &nombreVoulu);// x est egal a la valeur de retour de la fonction
        
        if (x==0)
        {
        printf("resultat : %s\n ",resultat);
        printf("on a  %ld fois le mot %s \n", nombreVoulu, MotVoulu);
        }
        else
        {
        printf("resultat : %s\n ",resultat);
        printf("on a seulement %ld fois le mot %s \n", nombreObtenu-2, MotVoulu);
        }
        system("PAUSE");
        return 0;
    }
    Mon compilateur (Dev c++) indique une erreur a la ligne que j'ai souligné, il m'écrit:expected primary-expression before `]`token.

    Je sais pas si l'erreur vient des pointeurs ou d'un autre truc parce que j'ai pas encore vu les pointeurs, c'etait justement le but de l'éxo, utiliser les pointeurs mais la j'dois avouer que j'suis larguer sur cette erreur.

  7. #27
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Salut ,

    2 remarques :

    * Ton code semble être du C++ => catégorie C++
    * Utilise la balise CODE pour que ce soit plus clair...

  8. #28
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    je ferais plusieurs remarques :

    1) fais des indentations correctes
    2) pourquoi passes-tu des entiers par adresse alors que tu ne vas pas les modifier (nombreVoulu) ?
    3) il y a une fonction standard qui te calcules la longueur de la chaîne (strlen(Mot) ) au lieu de faire ta boucle while.....
    4) il te manque une allocation sur retour
    5) "mot" est masculin , donc "quelle" est en fait "quel" ......
    6) Si tu es en C++ je ne sais pas ce qu'il te faut comme include, mais en C je ne sais pas ce que vient faire "namespace" et "iostream"... stdlib et stdio marchent très bien
    7) pourquoi fais-tu "system(PAUSE)" ??
    8) En général la règle veut qu'on passe les arguments qui ne sont pas modifiés et qui sont des INPUT en premier (mot, nbVoulu), puis ceux qui sont entrée/sortie, et enfin ceux qui sont sortis...
    9) tes accolades ne sont pas par paires (voir le 1) donc c'est sûr qu'il y a un pbe à la compilation... Regardes attentivement...

    C'est tout pour l'instant

  9. #29
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par souviron34
    8) En général la règle veut qu'on passe les arguments qui ne sont pas modifiés et qui sont des INPUT en premier (mot, nbVoulu), puis ceux qui sont entrée/sortie, et enfin ceux qui sont sortis...
    L'ordre des parametres d'une fonctions different beaucoup en fonction des normes de codage et des langages.
    En C, c'est meme plutot l'inverse qui est utilise, voir a ce sujet la bibliotheque standard (en partculier les fonctions du type memcpy, strcpy, strcat, etc.)

  10. #30
    Membre averti
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    J'ai recompté les acolades et elles sont en paires( ou alors j'suis completement aveugle ).
    Sinon, j'connaissais pas la fonction strlen mais elle est tres pratique merci.
    Le system("PAUSE"), je sais plus à quoi sa sert mais on m'a toujours dit de le mettre à la fin de mon prog.
    Et pour le "quelle",on va dire que c'est une faute d'innatention .

    Mais bon, mon programme ne marche toujours et je comprend pas c'est quoi comme erreur expect primary-key...

  11. #31
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    int main(void)

    ça marcherait pas mieux ??

  12. #32
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Rydley
    Mais bon, mon programme ne marche toujours:
    Poste le code à jour. On ne sait pas quelles nouvelles erreurs tu as ajouté...

    D'autre part, le C++, c'est pas ici. C'est la porte d'à-coté...

  13. #33
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    int main(void)

    ça marcherait pas mieux ??
    En C++, non...

  14. #34
    Membre averti
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    Citation Envoyé par souviron34
    int main(void)

    ça marcherait pas mieux ??
    J'y avais pensé mais non sa marche pas toujours pareil.

  15. #35
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    En C++, non...
    ok noté milles excuses..

    Mais j'ai vu ce que c'était tes erreurs Rydley...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        char resultat[30];
        char MotVoulu[20];
        ......
     
        x=dupliqueMot(&nombreObtenu, &resultat[], MotVoulu[], &nombreVoulu);
    Il n'y a rien qui te choques là-dedans ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        char resultat[30];
        char MotVoulu[20];
        ......
     
        x=dupliqueMot(&nombreObtenu, &resultat[], MotVoulu[], &nombreVoulu);
    Il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       x=dupliqueMot(&nombreObtenu, &resultat, MotVoulu, &nombreVoulu);

  16. #36
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et dans ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int dupliqueMot(int *nbPoss,char **retour, char *mot, int *nbOcc){

  17. #37
    Membre averti
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    J'avoue que mettre les crochets dans l'appel de la fonction, c'est quand même une grosse erreur.
    J'ai fait les modifications dans l'appel de la fonction et dans le prototype et l'ancienne erreur a disparu GENIAL
    Mince j'ai appuyé sur entré.
    Bon reprenons.

    Maintenant y a une autre erreur: Dev me dit toujours a propos de cette ligne :63 cannot convert `char (*)[30]' to `char**' for argument `2' to `int dupliqueMot(int*, char**, char*, int*)' .

  18. #38
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bon je ne connais pas C++. En C j'écrirais comme ça..

  19. #39
    Membre averti
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    Ah sa y est j'ai reussi a regler mon probleme, mon programme marche nikel, en fait il me manquait une etoile quelque part dans le code j'ai eu du mal a trouver l'erreur mais c'est fait.
    Merci pour toute les informations que vous m'avez donné ce week-end, j'aurais jamais reussi sans .

  20. #40
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Si tu programme en C++, le bon forum est http://www.developpez.net/forums/forumdisplay.php?f=19

    Par ailleurs, contrairement au langage C, il est possible en C++ d'écrire int main() qui signifie que la fonction main ne possède aucun paramètre.

    Si tu écris ton code en C++, je ne comprends pas pourquoi tu utilises des fonctions telles que printf() ou strcat() alors qu'il existe des alternatives en C++. Malgré tout, si tu désires utiliser ces fonctions, tu doit inclure les fichiers d'en-tête suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <cstdio>
    #include <cstring>
    A part quelques détails qui laissent penser que ton code est du C++, le style de programmation utilisé ici est du C (aucun idiome C++ à l'horizon), et il y a beaucoup d'erreurs. Regardons tout d'abord l'interface de la fonction duplique mot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int dupliqueMot(int *nbPoss, char *retour[], char mot[], int *nbOcc)
    {
        /*...*/
    }
    Le paramètre nbOcc correspond au nb de répétitions demandées par l'utilisateur. La valeur de ce paramètre n'est pas modéfié par ta fonction. Il n'y a donc aucune raison ici de passer nbOcc par pointeur.

    Le paramètre mot correspond à la chaîne de charactères que l'utilisateur veut répéter nbOcc fois. Cette chaîne n'est pas modifiée par la fonction, on peut donc déclarer mot avec le type suivant: char const mot[]

    Le paramètre retour, si j'ai bien compris ton code, correspond à la chaîne retournée par ta fonction. Il s'agit d'une chaine de caractères et non d'un tableau de pointeurs sur char. Ainsi, le paramètre retour est déclaré comme: char retour[].

    Ici, ta fonction dupliqueMot n'alloue aucune resources. L'espace mémoire pour contenir la chaine de caractère retour est alloué par la fonction appelante. nbPoss pointe sur un entier. Si l'espace alloué à retour est insuffisant pour contenir nbOcc occurences de mot, *nbPoss indique le nombre d'occurences de mot effectivement placées dans le buffer pointé par retour. Par ailleurs, si l'espace mémoire pointé par retour est insuffisant pour insuffisant pour accueillir nbOcc occurences de mot, la fonction renvoie le code d'erreur 0.

    Personnellement, je modifierais la stratégie pour indiquer en retour de la fonction duplique mot le nb d'occurences de mot effectivement concaténées au sein de la chaine retour, ce qui permet d'éliminer nbPoss et donne le code suivant (traduit 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
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    /**
     * Compose la chaine retour avec nb_occ occurences de mot
     */
    int dupliqueMot(char p_retour[], size_t size_retour, char const mot[], int nb_occ)
    {
     
        int i;
        int nb_copies;
        const int nb_mots_max = (size_retour - 1) / strlen(mot);
     
        nb_copies = nb_occ < nb_mots_max ? nb_occ : nb_mots_max ;
     
        p_retour[0] = '\0';
        for (i = 0; i < nb_copies; i++)
        {
            strcat(p_retour, mot);
        }
        return nb_copies;
    }
     
    /**
     * Affiche message sur stdout et saisit la ligne entrée par l'utilisateur.
     */
    void get_line(char buffer[], size_t size_buff, char const *message)
    {
        char *p_saisie_ok = NULL;
     
        if (buffer != NULL && size_buff >= 2)
        {
            while (p_saisie_ok == NULL)
            {
                printf("%s (max %d caractères) : ", message, size_buff - 2);
                fflush(stdout);
                fgets(buffer, size_buff, stdin);
                /* si p_saisie_ok vaut NULL, le mot entré par l'utilisateur est
                   trop long */
                p_saisie_ok = strchr(buffer, '\n');
                if (p_saisie_ok == NULL)
                {
                    scanf("%*[^\n]");
                    getchar();
                }
                else
                {
                    /* On élimine le caractère '\n' à la fin de mot_voulu */
                    *p_saisie_ok = '\0';
                }
            }
        }
    }
     
    /**
     * Affiche message sur stdout et saisit l'entier entré par l'utilisateur.
     */
    void get_int(int *p_number, char const *message)
    {
        int rc; /* return code of scanf() */
     
        if (p_number != NULL)
        {
            while (rc != 1)
            {
                printf("%s : ", message);
                fflush(stdout);
                /* scanf retourne le nombre de valeurs lues avec succès */
                rc = scanf("%d", p_number);
                /* On vide le flux stdin */
                scanf("%*[^\n]");
                getchar();
            }
        }
    }
     
    /* Point d'entrée du programme */
    int main(void)
    {
        char resultat[30];
        char mot_voulu[20];
        int nombre_voulu = 0;
        int nombre_obtenu = 0;
     
     
        /* Saisie d'un mot entré par l'utilisateur */
        get_line(mot_voulu, sizeof mot_voulu, "Quel mot voulez-vous dupliquer?");
        /* Saisie d'un entier entré par l'utilisateur */
        get_int(&nombre_voulu, "Combien d'occurences voulez-vous?");
     
        nombre_obtenu = dupliqueMot(resultat, sizeof resultat, mot_voulu, nombre_voulu);
     
        printf("Voici %d fois le mot %s (%d répétitions demandées)\n",
               nombre_obtenu, mot_voulu, nombre_voulu);
        printf("=> %s\n", resultat);
     
        return EXIT_SUCCESS;
    }
    Attention, j'ai remarqué que tu avais utilisé la gets(). Cet pratique est à éviter absolument. La fonction gets() peut toujours être remplacée par fgets() plus sure.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. [C++.net]Concatener des chaines de caractère
    Par Dlyan dans le forum MFC
    Réponses: 3
    Dernier message: 27/03/2006, 15h25
  2. [Oracle 8i/ Sql] Concatener une chaine
    Par dimdidi dans le forum Oracle
    Réponses: 5
    Dernier message: 07/02/2006, 13h42
  3. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08
  4. Réponses: 2
    Dernier message: 01/07/2004, 11h36
  5. Concaténation de chaine de caractères
    Par joy dans le forum Linux
    Réponses: 5
    Dernier message: 07/07/2003, 13h03

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