Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 27/09/2017, à 13:58

plouf1221

flot de texte [RESOLU]

Bonjour,

J'essaye de faire le programme suivant :
Écrire un programme qui copie son entrée sur sa sortie en remplaçant les séries de un ou plusieurs espaces par un seul caractère espace.

Voici le programme que j'ai écris :

// Bibliothéques standart :
//====================================================================================
#include<stdio.h>
#include<stdlib.h>
//====================================================================================



// Le main :
//====================================================================================
int main (void)
{                                                                                     
        int c;
        while ((c = getchar ()) != EOF)
        {
                putchar (c);
                while (c == ' ')
                {
                        c = getchar ();
                }
        }

        return EXIT_SUCCESS;
}
//====================================================================================

Le programme est défaillant.
Comme on ne connaît pas le nombre d'espace à l'avance ça respire la boucle while, ce que j'ai fait.
Mais en testant mon programme je vois que la première lettre de chaque mot est manquante et je ne comprends pas pourquoi.

Dernière modification par plouf1221 (Le 27/09/2017, à 16:44)

Hors ligne

#2 Le 27/09/2017, à 15:56

pingouinux

Re : flot de texte [RESOLU]

Bonjour,
C'est normal, parce que lorsque tu lis un caractère non blanc après un ou plusieurs blancs dans le while interne, tu ne l'écris pas et lis le caractère suivant au début du while externe.
Tu peux faire ceci :

............................................
        while ((c = getchar ()) != EOF)
        {
                putchar (c);
                while (c == ' ')
                {
                        c = getchar ();
                        if (c!=' ') putchar (c);
                }
        }
............................................

Ajouté : Autre façon de faire

............................................
        int c, n_blanc=0;
        while ((c = getchar ()) != EOF)
        {
           if(c==' ') n_blanc++;
           else       n_blanc=0;
           if(n_blanc<=1) putchar(c);
        }
............................................

Dernière modification par pingouinux (Le 27/09/2017, à 16:08)

Hors ligne

#3 Le 27/09/2017, à 16:44

plouf1221

Re : flot de texte [RESOLU]

A ok je saute le caractere qui m’intéresse car je fait un autre appel avec getchar lorsque je suis dans le while externe.
A oué c'est vraiment bien vu.
Merci pingouinux.

Hors ligne

#4 Le 27/09/2017, à 16:54

pingouinux

Re : flot de texte [RESOLU]

Autre méthode :

............................................
        while ((c = getchar ()) != EOF)
        {
                putchar (c);
                while (c == ' ')
                {
                        c = getchar ();
                        if (c!=' ') ungetc (c,stdin);
                }
        }
............................................

Hors ligne