Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur incompréensible.

    4 septembre 2007 à 19:01:15

    Salut,
    Je programmes actuellement un serveur UDP sous linux (Debian).
    Le serveur est dans une pthread pour permettre un systeme de commandes.
    Le problème, c'est que pour le chat, j'ai fais une structure que je voudrais en tableau.
    j'ai donc une variable (int) qui est utilisée pour la ligne du tableau.
    Voici le code :
    1. sprintf(chemin, "./persos/pos/%s.txt", login);
    2.            cout << "Ouverture du fichier :" << chemin << " pour y lire les positions du joueur" << endl;        
    3.        fichier = fopen(chemin, "r");
    4.         if (fichier != NULL)
    5.         {
    6.          if(nb <= 30)
    7.          {
    8.          fscanf(fichier, "%s", pos);
    9.          sscanf(pos, "B%fA%fF%f", &msg[nb].X, &msg[nb].Y, &msg[nb].Z);
    10.          strcpy(msg[nb].login, login);
    11.          strcpy(msg[nb].msg2, commande);
    12.          nb++;
    13.          cout << nb << endl;
    14.          }
    15.          else if(nb == 31)
    16.          {
    17.           nb = 0;            
    18.          }
    19.          fclose(fichier);
    20.         }
    21.         cout << msg[0].login << msg[0].msg2 << endl;

    Le problème c'est que quand je test, il est censé afficher nb(la variable) mais moi il affiche 1.
    1 c'est normalpour le premier message mais apres, il est censé devenir 2,3,4,...
    Le problème, c'est que la valeur de la variable ne change pas.
    Mais quand j'envois plusieurs messages dans un laps de temps, la valeur change et affiche 4,3,5,...(des nombres illogiques).

    Savez vous comment faire?

    Merci d'avance.

    Gp2mv3
    • Partager sur Facebook
    • Partager sur Twitter
      4 septembre 2007 à 19:06:55

      fopen, sscanf, sprintf... Aides-toi et les dieux t'aideront...
      • Partager sur Facebook
      • Partager sur Twitter
        4 septembre 2007 à 19:08:56

        Quoi, c'est pas sa le probleme, sa fonctionne très bien sa.
        J'ai l'impression que tu ne les aimes pas ces 3 las parce que déjà avant, tu disais qu'il y avait mieux mais je ne vois pas quoi.

        • Partager sur Facebook
        • Partager sur Twitter
          4 septembre 2007 à 19:38:07

          Trace ta variable nb avec le debugueur ou a coup de printf : il est hautement probable que tu la remette a zéro par inadvertance.
          Comme dit Mattex : aide toi, le ciel t'aidera : le debuggueur (ou les printf) sont tes amis
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            4 septembre 2007 à 19:39:50

            oui je fais un cout << nb << endl; donc il affiche la variable mais elle a pas la bonne valeur.
            • Partager sur Facebook
            • Partager sur Twitter
              4 septembre 2007 à 19:43:51

              A toi de la tracer ( = la suivre) pour savoir ou elle a pu changer :)

              "Programmer sans débuggueur, c'est se bander les yeux pour aller courir"
              -> tu prepares ta course, puis tu te bandes les yeux, et tu fonces, et quand tu te plantes, tu ne sais pas ou....
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                4 septembre 2007 à 20:49:05

                En fait ce que je disais c'est que l'utilisation des cout, cin et ofstream sont un standard en C++ et ça aide beaucoup à la compréhension des autres qui veulent t'aider... alors nb est déclaré où?
                • Partager sur Facebook
                • Partager sur Twitter
                  5 septembre 2007 à 16:42:05

                  En fait, il est déclaré au début en tant que int.
                  Il est doffice égale à 0.
                  Voici le simple code d'initialisation : int nb = 0;

                  Bien amicalement.

                  Gp2mv3
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 septembre 2007 à 16:48:24

                    As-tu plusieurs threads qui écrivent avec cout?

                    parce que si j'ai un thread qui écrit une fois avec cout : "patates" et un autre qui écris une fois aussi "fromage" je risque fort de me retrouver avec "paftromataesge" (Ou tout autre mélange)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 septembre 2007 à 16:57:01

                      Mélange de patates et de fromage, sluuurpp !!!
                      Et encore meilleur si y'a des lardons avec !! :)

                      Trace ta variable, ça veut dire de la controler souvent, pas juste au début :)
                      Il doit y avoir un moment ou elle se fait écraser, controle ça !
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                        5 septembre 2007 à 18:33:03

                        Non, en faite, il y a une pthreads contenant le serveur et elle est créée au début du programme et dans le main, j'ai fais une boucle avec un cin qui détecte la lettre Q pour quitter et si la lettre est Q, il détruit la connexion et la pthreads et il quitte le message mais je ne pense pas que ce soit un probleme d'affichage.
                        Fvirtman, j'ai déja éssayé mais c'est au moment de faire nb++ que sa déconne.

                        Bien amicalement.

                        Gp2mv3
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Erreur incompréensible.

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown