Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1626 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  problème boucle while

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème boucle while

n°1874609
t0t0l
Posté le 18-04-2009 à 09:14:32  profilanswer
 

Bonjour, je suis débutant en c++ et j'ai un petit problème avec une boucle while, voici le code
 

Code :
  1. static int wgCount = 0;
  2. char ** getWidgets(int windowId)
  3. {
  4. char ** test = NULL;
  5. for (wgCount; wgCount < sizeof(widgets); wgCount++)
  6.         {
  7.           test = split(widgets[wgCount],';');
  8.   if (atoi(test[2]) == windowId)
  9.        return test;
  10. }
  11. test = NULL;
  12. wgCount = 0;
  13. return test;
  14. };
  15. while (1)
  16. {
  17. datas = getWidgets(id);
  18. if ( (char *)datas == NULL)
  19.  break;
  20. this->addWidget(( char * ) datas);
  21. }


 
 
Le problème, c'est que je voudrais sortir de la boucle while quand la fonction getWidgets retourne un pointeur null mais ca ne fonctionne pas, j'ai toujours une boucle infinie.


Message édité par t0t0l le 18-04-2009 à 17:12:16
mood
Publicité
Posté le 18-04-2009 à 09:14:32  profilanswer
 

n°1874626
jesus_chri​st
votre nouveau dieu
Posté le 18-04-2009 à 11:41:50  profilanswer
 

id ne semble pas changer à chaque tour de boucle
où est déclaré datas ?
Tu n'est pas obligé de caster datas pour le comparer à NULL.

n°1874638
t0t0l
Posté le 18-04-2009 à 12:26:36  profilanswer
 

jesus_christ a écrit :

id ne semble pas changer à chaque tour de boucle
où est déclaré datas ?
Tu n'est pas obligé de caster datas pour le comparer à NULL.


 
 
voici le code complet de la fonction qui intègre ma boucle while
 

Code :
  1. void KrWindow::_getWidgets()
  2. {
  3.    char ** datas = NULL;
  4.    while (1)
  5.    {
  6.       datas = getWidgets(this->getId());
  7.       if ( datas == NULL)
  8.          break;
  9.       this->addWidget(datas);
  10.    }
  11. };


 
 
pour expliquer un peu plus mon but recherché voici ce que je veut faire
 
j'ai un tableau de *char, par exemple :  
 
static char * widgets[] = {
    //id;app;window;type;label;x;y;w;h;fColor;bColor;orientation;action;defaultValue
    "1;0;1;5;essai1;10;10;100;40;000000;000000;0;1=20; ",
    "2;0;1;5;essai2;10;10;100;40;000000;000000;0;1=20; "
};
 
Je veux renvoyer a ma fonction (KrWindow::_getWidgets) toutes les lignes ou la troisième valeur (window) est egale à 1 par exemple (parametre id de ma fonction).
 
je sais pas si j'ai été très clair  :pt1cable:  
 
 

n°1874648
jesus_chri​st
votre nouveau dieu
Posté le 18-04-2009 à 12:57:44  profilanswer
 

this->getId() change-t-il à chaque tour de boucle ?
Ta condition d'arret est bonne, mais j'ai surtout l'impression que tu ne déplaces pas ton indice, donc à tour ta boucle fait la même chose, d'où la boucle infinie.

n°1874653
t0t0l
Posté le 18-04-2009 à 13:03:14  profilanswer
 

non id ne varie pas, puisque je veux recuperer toutes les lignes ou window (qui correspond a mon parametre windowId) est egal à 1 par exemple.

n°1874701
jesus_chri​st
votre nouveau dieu
Posté le 18-04-2009 à 16:12:11  profilanswer
 

Code :
  1. static int wgCount = 0;
  2. char ** getWidgets(int windowId)
  3. {
  4. char ** test = NULL;
  5. for ( wgCount ; wgCount < sizeof(widgets); )
  6.         {
  7.           test = split(widgets[wgCount++],';');
  8.   if (atoi(test[2]) == windowId)
  9.        return test;
  10. }
  11. test = NULL;
  12. wgCount = 0;
  13. return test;
  14. }


 
voila une solution, ça corrige juste ton bug. Mais je n'aime pas le style de la fonction, l'usage de la static pour wgCount est difficile à comprendre et très peu souple. Le coup de la static qui est remise à 0 une fois que la boucle est terminée, j'avais jamais vu...

n°1874712
t0t0l
Posté le 18-04-2009 à 16:47:54  profilanswer
 

Ok merci ca fonctionne ;)
 
L'utilisation de wgCount en statique c'est d'avoir un index statique qui parcourt mon tableau afin de ne pas recommencer sa lecture depuis le debut a chaque appel de la fonction. Sinon la fonction me renverra a chaque fois la première ligne du tableau...
 
 
Si t'as une autre idée, je suis preneur.
 
edit : j'ai parlé trop vite, maintenant je n'ai plus de boucle infinie mais la fonction me retourne toujours qu'une seule ligne  :(  
 
 


Message édité par t0t0l le 18-04-2009 à 17:16:16
n°1874770
jesus_chri​st
votre nouveau dieu
Posté le 18-04-2009 à 20:55:16  profilanswer
 

peut-être parce qu'il n'y a qu'une seule ligne de bonne.
je te propose :
 

Code :
  1. char** getWidgets(int windowId, int index)
  2. {
  3.     for (; index < sizeof(widgets); index++)
  4.     {
  5.         char** test = split(widgets[index],';');
  6.         if (atoi(test[2]) == windowId)
  7.             return test;
  8.     }
  9.     return NULL;
  10. }
  11. char** datas;
  12. int index = 0;
  13. while ( datas = getWidgets(id, index++) )
  14. {
  15.     this->addWidget(( char * ) datas);
  16. }


 
Par contre le cast de datas de char** vers char*, il me semble douteux...


Message édité par jesus_christ le 18-04-2009 à 20:55:55

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problème boucle while

 

Sujets relatifs
Petit problème macros VBA ExcelProbleme jointure sur phpmyadmin
(Débutant) Chaine de caractère : problèmeFonction récursive de parcours d'un arbre xml qui boucle indéfiniment
Probleme affichage + Boucle while[C] Problème de boucle While
probleme de boucle while[GLUT] Probleme avec boucle while
[PHP] Problème boucle while et "continue;"Probleme boucle while[Résolu]
Plus de sujets relatifs à : problème boucle while


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR