mardi 13 décembre 2011

Longueur d'une chaîne de caractères (par une fonction)

Écrire un programme lgChaine.c :
  • qui lit des chaines de caractères tapées au clavier (flux stdin);
  • qui calcule la longueur de chaque chaîne entrée et l'affiche ainsi que sa longueur;
  • qui s'arrête si l'utilisateur ne frappe que la touche Entrée ou si le fichier est fini (Ctrl-D tapé par l'utilisateur). 
Vous utiliserez :
  • une des fonctions déclarée dans stdio.h.
  • la fonction strlen, ainsi que d'autres si nécessaire, déclarée dans string.h.
 Solution

/*
Nom ...... : lgChaine.c
Auteur ... : Thierry46
Role ..... : Lit des chaines et affiche leur longueur.
Paramètres : non pris en compte.
Code retour : 0 (EXIT_SUCCESS)
Pour produire un executable avec le compilateur libre GCC :
   gcc -Wall -std=c99 -o lgChaine.exe lgChaine.c
Pour exécuter, tapez : ./lgChaine.exe
 
Version : 1.0 du 14/1/2008
Licence : GNU GPL
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
 
int main(void)
{
        char reponse[_POSIX_MAX_INPUT];
        size_t lgReponse = 0;
        int codeRetour = EXIT_SUCCESS;
        char *posCr;
        char *chRetour;
 
        (void)puts("Entrez du texte puis la touche Entree,\n"
                "ou appuyez seulement sur la touche Entree pour arreter");
 
        do
        {
                // Lecture de la chaine au clavier \n inclu
                chRetour = fgets(reponse, _POSIX_MAX_INPUT, stdin);
                if (chRetour != NULL)
                {
                        // Suppression du \n final eventuel
                        posCr = strrchr(reponse, '\n');
                        if (posCr != NULL)
                        {
                                *posCr = '\0';
                        }
 
                        // Calcule la longueur de la chaine
                        lgReponse = strlen(reponse);
 
                        if (lgReponse != 0)
                        {
                                (void)printf("Vous avez entre la chaine :\n"
                                        "\t-\"%s\"\n"
                                        "\t- %zu caractere%s\n",
                                        reponse, lgReponse,
                                        (lgReponse>1) ? "s" : "");
                        }
                }
                else if (ferror(stdin))
                {
                        (void)fputs("Probleme de lecture.\n", stderr);
                        codeRetour = EXIT_FAILURE;
                }
        } while ((chRetour != NULL) && (lgReponse != 0));
 
        return codeRetour;
} 

Aucun commentaire:

Enregistrer un commentaire