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 :

comparaison dans une boucle inutile ou non ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 172
    Points : 99
    Points
    99
    Par défaut comparaison dans une boucle inutile ou non ?
    Bonjour.

    Je suis en train de lire le K&R2, et je lis en parallèle des solutions proposées aux exercices du livre sur ce wiki :

    http://clc-wiki.net/wiki/K%26R2_solu...r_1:Exercise_9

    J'ai beau relire et bien réfléchir, il me semble que la troisième solution utilise inutilement l'opérateur ET logique.

    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
    #include <stdio.h>
     
    int main(void)
    {
    	int c;
    	while ((c = getchar()) != EOF) {
    		 if (c == ' ') {
    			putchar(c);
    		 	while((c = getchar()) == ' ' && c != EOF)
    				;
    		}
    		if (c == EOF)
    			break; /* the break keyword is mentioned
    				* in the introduction... 
    				* */
     
    		putchar(c);
    	}
    	return 0;
    }
    Je veux dire la comparaison c != EOF dans la deuxième boucle me semble superflue, puisque le but est d’exécuter la boucle tant que c = ' ' et elle n'est pas exécutée avec tout autre valeur (EOF compris).

    Quelque chose m'échappe ou ai je raison ?

  2. #2
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Oui, si c contient la valeur EOF, c est forcément différent du caractère ESPACE et la boucle interne s'arrête. Le programme suivant est ainsi également correct:

    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
    #include <stdio.h>
     
    int main(void)
    {
        int c;
        int end = 0;
     
        while ((c = getchar()) != EOF && end == 0)
        {
            if (c == ' ')
            {
                putchar(c);
                while((c = getchar()) == ' ')
                {
     
                }
            }
     
            if (c == EOF)
            {
                end = 1;
            }
            else
            {
                putchar(c);
            }
        }
        return 0;
    }
    Avec mes meilleures salutations

    Thierry

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 172
    Points : 99
    Points
    99
    Par défaut
    Ok merci.

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

Discussions similaires

  1. exception non levée malgré throw dans une boucle for
    Par marion5515 dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2009, 17h53
  2. [débutant] Actions dans une boucle non effectuées
    Par Diegoooowwww dans le forum Caml
    Réponses: 10
    Dernier message: 31/12/2008, 19h56
  3. Comparaison dans une boucle
    Par dam28800 dans le forum Langage
    Réponses: 20
    Dernier message: 13/11/2008, 14h27
  4. comparaison+affectation dans une boucle
    Par casafa dans le forum C++
    Réponses: 6
    Dernier message: 07/06/2008, 12h25
  5. [VBA Word] - Répondre "NON" dans une boucle
    Par kitcreanet dans le forum VBA Word
    Réponses: 4
    Dernier message: 18/10/2007, 10h41

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