1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

La cave des codeurs

Discussion dans 'Logiciels' démarrée par SataMaxx, 17 Février 2009.

  1. Tryskel.

    Tryskel. Tryskelff

    Inscrit le :
    7 Octobre 2009
    Messages :
    7 527
    sarx, vu comment je tente de commenter mon code, je pense ne pas avoir trop de problèmes sur la clarté (enfin, là, mon code ne fait que 104 lignes...). Mais on n'est jamais à l'abri du spectre de la flemme... Chuis sûr que c'est le bordel niveau indentations dans mon code.

    Finalement, j'ai pris la solution 1 de Cavetroll pour l'instant. Mais elle manque de souplesse... je verrai bien.

    J'ai, effectivement, viré m. je suis assez faible avec l'optimisation...

    EDIT : Allez, nouvelle difficulté, avec un problème que j'ai déjà rencontré avant en C.

    Cette fois, mes tableaux de saisie et résultats sont passés en dynamique (char*). Le but : pouvoir être libre dans la taille de la saisie.
    La première étape est de compter le nombre de caractères de la saisie.
    Code:
    cout<<"Saisir vos caracteres a crypter :\n";
    cin>>tabs;
    getchar();
    getchar();
    k = strlen(tabs);
    cout<<k;
    Et donc, plantage au moment de l'exécution du strlen. Même chose avec une fonction Taille à la place de strlen (je n'ai pas fouillé, ça doit fonctionner pareil) :
    Code:
    int Taille(char* s)
    {
        int i = 0;
        
        while (s[i]!='\0')
        {
              i++;
        }
        return (i);
    }
    Comment donc faire cohabiter un char* avec une boucle ?
    Je continue à fouiller de mon côté, notamment voir s'il y a pas quelque chose de plus adapté que cin...
    (je sens bien un problème de \0 encore. EDIT : ben non, le compilateur s'occupe de le rajouter apparemment...)
     
    Dernière édition: 16 Octobre 2012
  2. SataMaxx

    SataMaxx Véritable ancien

    Inscrit le :
    4 Avril 2008
    Messages :
    3 767
    Lieu:
    Boston
    Non, c'est encore un problème d'allocation mémoire : un tableau dynamique ne se redimensionne pas «tout seul», il faut quand même lui donner une taille, de la place en mémoire ! (quel intérêt par rapport au statique vas-tu me demander : et bien c'est que tu peux utiliser une variable et non plus une constante pour dimensionner une première fois ton tableau, et aussi que tu peux l'élargir ou rétrécir si besoin ensuite. Par contre ça ajoute la contrainte de devoir nettoyer derrière toi en libérant la mémoire allouée au tableau).

    Donc quand tu définis
    Code:
    char* s;
    Tout ce que tu fais c'est dire au système «créé une variable qui pourra contenir une adresse en mémoire, et considère ça comme un char comme ça tu sauras où trouver le bloc suivant si j'm'amuse avec des tableaux ou de l'arithmétique des pointeurs».
    Il est de bon ton si tu n'initialise pas ton pointeur tout de suite vers quelque chose d'existant de le faire pointer vers NULL.

    Une fois ce pointeur en main il faut alors allouer de l'espace en mémoire pour y stocker ce que tu veux, et faire pointer le pointeur dessus, ce qui se fait généralement avec malloc :
    Code:
    s = malloc(n * sizeof(char));
    ou calloc, comme tu préfères :
    Code:
    s = calloc(n, sizeof(char));
    cin n'alloue pas tout seul de la place en mémoire, et il faut pouvoir lui dire de limiter l'entrée à une certaine taille, ce qui est possible avec
    Code:
    cin.width(taille_max);
    cin >> s;
    Et bien sûr on oublie pas à la fin de nettoyer derrière soi avec un petit
    Code:
    free(s);
    edit :

    Je viens de revoir ça :

    Ceci marche très bien ! Si tu lui donnes des guillemets, le C se charge de mettre un '\0' à la fin.
    Le problème là venait comme je l'ai souligné dans mon précédent message de la dimension de ton tab1 : tu ne lui donnes que 25 «cases», donc déjà pas assez pour contenir l'alphabet, et si en plus tu veux pouvoir l'utiliser comme une chaîne de caractères il faut lui donner encore une case de plus. En position [24] (la dernière allouée), ton initialisation met bien un '\0', mais lorsque tu l'as rempli avec l'alphabet tu as tout simplement écrit sur ce '\0' !
     
    Dernière édition: 16 Octobre 2012
  3. Guicheman

    Guicheman Crono Moderator

    Inscrit le :
    6 Février 2009
    Messages :
    17 369
    Lieu:
    Shayol Ghul.
    Mais sinon, comme l'a dit CaveTroll, quitte à faire du C++, autant virer les char* et utiliser des String. C'est quand même beaucoup plus agréable.
     
  4. SataMaxx

    SataMaxx Véritable ancien

    Inscrit le :
    4 Avril 2008
    Messages :
    3 767
    Lieu:
    Boston
    J'm'apprêtais également à faire la même remarque, et je venais de voir que le troll l'avait déjà faite bien plus tôt !

    Mais ça ne ferait que contourner le problème. Enfin d'accord, pas celui des chaînes de caractères puisqu'il est plus simple et moins sujet à erreur d'utiliser les std::string, pourquoi s'en passer ?
    Mais il me semble plutôt important de bien comprendre le fonctionnement en C des chaînes, tableaux et tableaux dynamiques…
     
    Dernière édition: 16 Octobre 2012
  5. Tryskel.

    Tryskel. Tryskelff

    Inscrit le :
    7 Octobre 2009
    Messages :
    7 527
    Satamaxx : en effet pour la fin, c'est logique. Merci pour l'explication ensuite...

    Guiche : oui, c'est clair... Mais vu que le prof continue en C sur son cours, je sens qu'on ne va pas approfondir le C++... Dommage, un String est effectivement bien plus agréable à voir qu'un char :normal:
     
  6. Guicheman

    Guicheman Crono Moderator

    Inscrit le :
    6 Février 2009
    Messages :
    17 369
    Lieu:
    Shayol Ghul.
    Je suis d'accord. D'ailleurs Tryskelff, ça serait utile de refaire le même exercice avec des std::string une fois que tu auras réussi à le faire avec des char*
     
  7. Tryskel.

    Tryskel. Tryskelff

    Inscrit le :
    7 Octobre 2009
    Messages :
    7 527
    Yep (et me bouffer le cours du Zéro quand j'aurai le temps, après celui du C)
     
  8. Cagliary

    Cagliary Ancien

    Inscrit le :
    6 Avril 2010
    Messages :
    983
    Lieu:
    Belgique
    Yep!

    J'ai une question qui va vous paraitre toute bête mais je débute en php et j'aimerais faire en sorte que dans mon menu, lorsqu'on est sur une page, le lien de cette page soit en une autre couleur (comme le a.visited en css sauf qu'il ne doit pas garder la couleur par après).

    J'ai un peu fouillé sur le net mais je ne trouve rien qui m'aide...
     
  9. Halasimov

    Halasimov Vieux d'la vieille

    Inscrit le :
    25 Mars 2008
    Messages :
    7 286
    Lieu:
    Somewhere, Over the rainbow
    Sans doute parce qu'on ne fait pas ça en php, mais avec une combinaison de html/css.

    Avec un peu de javascript en facultatif, si tu veux rajouter des effets à ton menu.

    Tu peux aller voir ce tuto, par exemple.

    Edit : et en allant voir cet autre tuto (100-great-css-menu-tutorials), tu pourras devenir un créateur "d'une centaine" [size=-2](Ouaip, je viens de lire le dernier habitant de l'infini sorti, ça se voit tant que ça ?)[/size], capable de créer plus de 100 menus CSS différents :D
     
    Dernière édition: 21 Octobre 2012
  10. CaveTroll256

    CaveTroll256 Très ancien

    Inscrit le :
    30 Août 2009
    Messages :
    2 218
    Lieu:
    Espace de Cantor
    Ayant eu un peu plus de succès dans mes recherches que toi, Cagliary, je me permets de compléter la réponse de Halasimov par ces deux liens qui traitent spécifiquement du problème que tu cherches à résoudre:

    1. Surligner la page courante avec HTML/CSS de façon élégante (en changeant uniquement l'id de body)

    Cette méthode permet d'avoir un code HTML pour le menu qui ne change pas en fonction de la page. Je recommanderais cette méthode même si tu te sers de PHP pour insérer le menu lui-même.

    2. Le faire en PHP de façon un peu moins subtile

    Il est aussi possible de faire la chose en Javascript/CSS, mais c'est à éviter (beaucoup de personnes désactivent Javascript).
     
    Dernière édition: 21 Octobre 2012
  11. Cagliary

    Cagliary Ancien

    Inscrit le :
    6 Avril 2010
    Messages :
    983
    Lieu:
    Belgique
    Merci pour vos réponses!

    J'ai essayé vos solutions (sauf celle en php finalement, j'essayerai peut-être plus tard) mais aucunes ne marche...

    La première de CaveTroll fonctionne à moitié: quand je suis sur l'accueil, le lien change bien de couleur mais ne se modifie plus et les autres liens ne changent pas de couleur...
    Je ne comprends pas mon erreur... Bref, je demanderai à mon prof demain mais vu son incapacité à donner cours, je reviendrai sûrement vers vous si ça ne vous dérange pas ^^

    EDIT: j'ai trouvé mon erreur ^^ faut que j'apprenne l'anglais, j'avais mal lu une phrase...
     
    Dernière édition: 21 Octobre 2012
  12. SataMaxx

    SataMaxx Véritable ancien

    Inscrit le :
    4 Avril 2008
    Messages :
    3 767
    Lieu:
    Boston
  13. Ferannor

    Ferannor Très ancien

    Inscrit le :
    19 Février 2009
    Messages :
    2 001
    Lieu:
    Strasbourg
    Imprimer c'est mal, ben oui écologie toussa...
    Alors voici un petit CSS pour que vos visiteurs économise leur papier ;)

    Source
     
  14. Alex100dre

    Alex100dre Membre expérimenté

    Inscrit le :
    29 Janvier 2010
    Messages :
    224
    Ou comment gâcher une feuille pour dire de pas gâcher de feuille :D
     
  15. Cagliary

    Cagliary Ancien

    Inscrit le :
    6 Avril 2010
    Messages :
    983
    Lieu:
    Belgique
    Salutation!

    Pour mon tp de code as3, on créé un "platform game" mais avec un switch de personnage comme dans Trine (mais en plus basique, en gros, on a un personnage capable de sauter, un capable d'attaquer et un capable de se protéger). Mais on bloque un peu sur comment changer de personnage...

    On aimerait que ça se fasse avec une touche du clavier attribué à chaque personnage mais on cale un peu...

    Quelqu'un aurait une idée de la méthode à utiliser?
     
  16. silwek

    silwek Membre expérimenté

    Inscrit le :
    21 Décembre 2012
    Messages :
    284
    Lieu:
    Région Lyonnaise
    Sur quoi tu bloques exactement ? Parce que ta question est un peu large ^^
     
  17. Cagliary

    Cagliary Ancien

    Inscrit le :
    6 Avril 2010
    Messages :
    983
    Lieu:
    Belgique
    Comment peut-on passer d'un personnage à l'autre en appuyant sur une touche spécifique pour chaque perso. (En sachant que ce n'est pas juste l’apparence qui change, mais aussi les capacités...).

    En fait, on ne sait pas trop quelle(s) méthode(s) utiliser: boolean, conditions, class, ...?
     
  18. silwek

    silwek Membre expérimenté

    Inscrit le :
    21 Décembre 2012
    Messages :
    284
    Lieu:
    Région Lyonnaise
    Personnellement je serais passé par 3 classes representant chacun des persos, celle-ci héritant d'une classe abstraite "AbstractPlayer" avec une methode "makeAction" par exemple. Chaque classe fille définira ce qu'il se passe lors de leur action spécifique (saut, attaque ou protection).
    Au clic sur une touche tu switch d'objet (et donc de personnage) et potentiellement tu indiques aux classes concernées via un listener que le joueur a changé.
    Après il faut voir comment ça s'intégre dans ton projet, c'est pas forcément la solution la plus rapide mais c'est comme ça que je partirais avec les infos que tu donnes.
    (bon après j'ai pas touché à flash depuis 1 an alors ça vaut ce que ça vaut ^^)

    [EDIT] Après si vous avez pas envie de vous prendre la tête, un int qui change en fonction de la touche et un beau switch dans la fonction qui gère l'action à faire.
     
  19. Cagliary

    Cagliary Ancien

    Inscrit le :
    6 Avril 2010
    Messages :
    983
    Lieu:
    Belgique
    Merci, on a réussi à le faire maintenant ^^
     
  20. silwek

    silwek Membre expérimenté

    Inscrit le :
    21 Décembre 2012
    Messages :
    284
    Lieu:
    Région Lyonnaise
    Cool :) Vous avez fait comment alors ?