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 :

Boucle croissante contre décroissante


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Boucle croissante contre décroissante
    Bonjour tout le monde !
    J'ai une question, probablement idiote, mais je ne vois pas le problème...

    J'ai une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=0 ; i<16 ; i++)
    {
    blabla, incrément de pointeurs, etc.
    }
    Que je remplace par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=15 ; i>=0 ; i--)
    {
    blabla, incrément de pointeurs, etc.
    }
    La première (i++) fonctionne bien, la seconde me conduit à une erreur d'écriture dans le pointeur (il doit en faire un de trop, je ne sais pas trop).
    Le code interne ne dépend pas de i.
    Où est la différence ?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    i ne serait pas non signe des fois (size_t est non signe)? Dans ce cas, le test i >= 0 est toujours vrai.

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    OK, je comprends le truc...
    Oui, i est non signé...
    Merci.

  4. #4
    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 progfou
    OK, je comprends le truc...
    Oui, i est non signé...
    Merci.
    Effectivement, c'est génant. size_t convient pour le indices croissants.

    Mais tu aurais pu faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i = 16; i > 0; i--)
    {
    }
    et là, size_t aurait aussi convenu...

    Ceci dit, avec ton code, un compilateur bien réglé aurait prévenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    main.c: In function `main':
    main.c:7: warning: comparison of unsigned expression >= 0 is always true
    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Mais tu aurais pu faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i = 16; i > 0; i--)
    {
    }
    et là, size_t aurait aussi convenu...
    Et utiliser i-1...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i = 15; i-- > 0; ) { ... }
    for (i = 15; i != (size_t)-1; --i) { ... }

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    OK, je retiens pour la prochaine fois .
    Mon compilateur est pourtant à un niveau de warning élevé... (visual studio)...
    Il faudrait que je trouve l'option de compilation qui me l'aurait dit...

  7. #7
    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 progfou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=15 ; i>=0 ; i--)
    {
    blabla, incrément de pointeurs, etc.
    }
    <...>me conduit à une erreur d'écriture dans le pointeur (il doit en faire un de trop, je ne sais pas trop).
    Dans le doute, affiche les valeurs de i dans la boucle...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/01/2012, 14h08
  2. [MySQL] Afficher date par ordre croissant ou décroissant
    Par christophe_s46 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/09/2009, 20h29
  3. Réponses: 5
    Dernier message: 25/07/2009, 15h17
  4. [MySQL] Tri croissant ou décroissant
    Par marquito dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/06/2007, 13h51
  5. Ordre croissant et décroissant
    Par sakia dans le forum VBA Access
    Réponses: 6
    Dernier message: 25/05/2007, 15h16

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