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;
} |