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 :

strcpy et/ou strcat me font crash


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut strcpy et/ou strcat me font crash
    Bonjour,

    mon jeu crash quand j'utilise ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      for(int i=0; i< NbJoueur + NbIA; i++){ //pour chaque joueur
     
            switch(i){
                case 0: //j1
                    for(int j=0; j<=5; j++){  //remplir les mains des joueurs de 6 tuiles
                            cmainj1[j] = pioche[posi_pioche]; //cmainj1 est un tableau de caractère
                            mainj1[j] = pioche[posi_pioche];  //cmainj1 et pioche sont des tableaux de valeurs numériques
                            strcpy(CheminImage,"all_");
                            strcat(CheminImage, cmainj2[j]);
                            posi_pioche++;
                            al_draw_bitmap(CheminImage, MAINX1 + j*30, MAIN1Y, 0);
     
                    }
                    break;
    Quand je retire ces deux lignes : strcpy(CheminImage,"all_"); et strcat(CheminImage, cmainj2[j]); il n'y a plus de soucis.
    Je ne comprends pas le problème.

    Par ailleurs, est ce un soucis de faire mainj1[j] = pioche[posi_pioche]; sachant que mainj1 est un tableau de caractères et pioche[posi_pioche] est un chiffre numérique ?

    Merci d'avance,

    Akiwhite

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut
    zut ! Je viens de me rendre compte que c'est CheminImage de al_draw_bitmap(CheminImage, MAINX1 + j*30, MAIN1Y, 0); qui me fait crasher !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Le premier paramètre de al_draw_bitmap est sencé être un ALLEGRO_BITMAP, strcpy prend un char*. Donc si ton truc compile tu as un sacré problème..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut
    Oui effectivement je me suis rendu compte du problème trop tard, as-tu une idée de comment faire pour résoudre mon problème ?

    Pourquoi cette alternative ne fonctionne-t-elle pas ?

    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
     
    ALLEGRO_BITMAP*all_xx;
    for(int i=0; i< NbJoueur + NbIA; i++){ //pour chaque joueur
     
            switch(i){
                case 0: //j1
                    for(int j=0; j < 6; j++){ //remplir les mains de 6 cases
                            cmainj1[j] = pioche[posi_pioche]; //cmainj1 est un tableau de caractère
                            mainj1[j] = pioche[posi_pioche];  //cmainj1 et pioche sont des tableaux de valeurs numériques
                            strcpy(CheminImage,"img/tuiles/");
                            strcat(CheminImage, cmainj1[j]);//les fichiers pnj portent les nom 00.pnj, 01.pnj ect ..
                            strcat(CheminImage, ".png");
                            posi_pioche++;
                            all_xx = al_load_bitmap(CheminImage);
                            al_draw_bitmap(all_xx, MAINX1 + j*30, MAIN2Y, 0);
                            al_destroy_bitmap(all_xx);
                    }
                    break;
    L'erreur est la suivante : Process returned -1073741819 (0xC0000005)
    mémoire mal (ou pas) libérée c'est donc surement du aux bitmap ...
    Je ne comprends pas l'erreur !

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Akiwhite Voir le message
    Pourquoi cette alternative ne fonctionne-t-elle pas ?
    Sais pas. Ca aurait été bien que tu nous montres à minima comment est défini "CheminImage", "cmainj1" et si tu peux garantir que "cmainj1[j]" est bien une chaine (une suite de caractères terminée par le caractère '\0').

    Citation Envoyé par Akiwhite Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                   strcpy(CheminImage,"img/tuiles/");
                            strcat(CheminImage, cmainj1[j]);//les fichiers pnj portent les nom 00.pnj, 01.pnj ect ..
                            strcat(CheminImage, ".png");
    Oui, pourquoi faire simple... sprintf(CheminImage, "img/tuiles/%s.png", cmainj1[j])
    Citation Envoyé par Akiwhite Voir le message
    Par ailleurs, est ce un soucis de faire mainj1[j] = pioche[posi_pioche] sachant que mainj1 est un tableau de caractères et pioche[posi_pioche] est un chiffre numérique ?
    Absolument pas. Tout est nombre en C, y compris les caractères. T'as donc parfaitement le droit de copier un chiffre numérique (au fait, "numérique" par opposition à quoi ? un chiffre "non numérique" ???) dans un char (nombre compris entre 0 et 255). Si le chiffre numérique est trop grand, la copie le tronquera via modulo 255.
    Maintenant si ta question est "est-ce que cette instruction correspond à ce que j'ai dans la tête", la réponse dépend alors de ce que tu as dans la tête et ça on peut pas le deviner...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut
    Bonjour et merci pour ta réponse !
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Sais pas. Ca aurait été bien que tu nous montres à minima comment est défini "CheminImage", "cmainj1" et si tu peux garantir que "cmainj1[j]" est bien une chaine (une suite de caractères terminée par le caractère '\0').
    cmainj1 ressemble à ca : char cmainj1[6];, non ma suite de caractère ne se termine pas par le caractère '\0', comment je suis censé faire ?
    Un autre problème se pose : le tableau cmainj1[6] ne peut stocker que 6 caractères alors je suppose qu'il faut procéder autrement pour récupérer des nombres à deux chiffres.
    CheminImage est défini comme tel : CheminImage[20]; Y a t il besoin d'un char ?

    sprintf(CheminImage, "img/tuiles/%s/.png", cmainj1[j]) Je ne connaissais pas, merci.

    Citation Envoyé par Sve@r Voir le message
    Absolument pas. Tout est nombre en C, y compris les caractères. T'as donc parfaitement le droit de copier un chiffre numérique (au fait, "numérique" par opposition à quoi ? un chiffre "non numérique" ???) dans un char (nombre compris entre 0 et 255). Si le chiffre numérique est trop grand, la copie le tronquera via modulo 255.
    Maintenant si ta question est "est-ce que cette instruction correspond à ce que j'ai dans la tête", la réponse dépend alors de ce que tu as dans la tête et ça on peut pas le deviner...
    Merci pour l'info, mes chiffres montent à 65 max donc le problème de trancature ne se pose pas.
    Mon but est de stocker un chiffre venant d'un tableau INT dans un tableau CHAR pour ainsi pouvoir l'utiliser dans CheminImage via sprintf (je me suis dit que c'etait necessaire de convertir INT en CHAR puisque CheminImage est une chaine de caractères)

    Après quelques test, il me semble que l'erreur se trouve dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(CheminImage, "img/tuiles/%s/.png", cmainj1[j])
    car lorsque je compile avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(CheminImage, "img/tuiles/10.png")
    mon programme a l'air de bien marcher !

    L'erreur est encore un soucis de mémoire : 0xC0000005

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut
    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
     
    switch(i){
                case 0: //j1
                    for(int j=0; j < 1; j++){ //remplir les mains de 6 cases
     
                            mainj1[j] = pioche[posi_pioche];  //mainj1 et pioche sont des tableaux de valeurs numériques
     
                            sprintf(CheminImage, "img/tuiles/%d/.png", mainj1[j]);//les fichiers png portent les nom 00.png, 01.png ect ..
     
                            posi_pioche++;
     
                            all_xx = al_load_bitmap(CheminImage);
                            if (!all_xx)
                                erreur("al_load_bitmap(\"xx.png\")");
     
                            al_draw_bitmap(all_xx, MAINX1 + j*30, MAIN1Y, 0);
                            al_destroy_bitmap(all_xx);
                            al_flip_display();
                    }
                    break;
    Après quelques changements, sprintf fonctionne bien, mais le soucis réside dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    all_xx = al_load_bitmap(CheminImage);
    .
    L'image n'arrive pas à se charger en mémoire, des idées ?

    Merci d'avance !

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Akiwhite Voir le message
    cmainj1 ressemble à ca : char cmainj1[6];, non ma suite de caractère ne se termine pas par le caractère '\0', comment je suis censé faire ?
    Tu le mets manuellement. Il y a fatalement à un moment ou un autre de ton code un endroit qui contient l'info "j'ai stocké n caractères dans cmain1". Te suffit d'écrire alors cmain1[n]='\0'. En t'assurant bien entendu que "n" soit inférieur à 6 (car un tableau de 6 a ses indices qui vont de 0 à 5). Et si (dans le pire des pires des cas) tu n'as aucun moyen de savoir combien tu stockes dans cmain1 ben suffit alors de tout le mettre à 0 avant de la remplir => memset(cmain1, 0, 6). Comme tu stockeras toujours moins de 6 (enfin c'est un des fondements des strings: on a toujours droit à un octet de moins que la taille de la string, ou corollaire on déclare toujours un octet de plus que le nb de caractères nécessaire) tu es certain qu'il y aura toujours un '\0' de positionné.

    Citation Envoyé par Akiwhite Voir le message
    Un autre problème se pose : le tableau cmainj1[6] ne peut stocker que 65 caractères alors je suppose qu'il faut procéder autrement pour récupérer des nombres à deux chiffres.
    Quel rapport entre "6 caractères" et "nombre à 2 chiffres" ??? Effectivement "dix-neuf" est un nombre à 2 chiffres mais il fait bien plus de 6 caractères...
    Et accessoirement, si tu veux forcer absolument un '\0' dans cmainj1 alors il ne peut plus stocker que 5 caractères (cf ma phrase précédete). Ben oui, si le '\0' occupe une place, il occupe fatalement une place initialement prévue pour un caractère.

    Citation Envoyé par Akiwhite Voir le message
    CheminImage est défini comme tel : CheminImage[20]; Y a t il besoin d'un char ?
    Heureusement que non. Toutefois, es-tu sûr que "img/tuiles/%s/.png" ne dépassera pas 19 (il faut garder une place pour le '\0').

    Citation Envoyé par Akiwhite Voir le message
    Mon but est de stocker un chiffre venant d'un tableau INT dans un tableau CHAR pour ainsi pouvoir l'utiliser dans CheminImage via sprintf (je me suis dit que c'etait necessaire de convertir INT en CHAR puisque CheminImage est une chaine de caractères)
    Oh là là quelle salade dans ta tête. Déjà sprintf() peut parfaitement afficher un chiffre (sprintf(CheminImage, "%02d", 12). Ensuite il y a une énorme différence entre le chiffre 8 (qui vaut 8) et le caractère '8' (qui vaut 50, valeur de son code ascii).

    Citation Envoyé par Akiwhite Voir le message
    Après quelques test, il me semble que l'erreur se trouve dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(CheminImage, "img/tuiles/%s/.png", cmainj1[j])
    car lorsque je compile avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(CheminImage, "img/tuiles/10.png")
    mon programme a l'air de bien marcher !

    L'erreur est encore un soucis de mémoire : 0xC0000005
    Pfff, tu nous donnes des informations fragmentées, en nous disant moins que le minimum. Comment tu veux qu'on fasse ? Je sens que tout ton topic est un cas de problème XY.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre éclairé
    Homme Profil pro
    Autres
    Inscrit en
    Août 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Août 2008
    Messages : 39
    Par défaut
    Bonjour,
    je retire mon message, tu as une explication plus haut.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut
    Désolé, je n'arrive pas bien a cerner les informations dont vous avez besoin pour comprendre !

    Ok je vais essayer d'expliquer le contexte :

    Dans le jeu de plateau que je dois réaliser (qwirkle) j'ai besoin d'une pioche aléatoire :
    Je rempli alors mon tableau "pioche" des valeurs qui représentent le nom des images en png que j'ai dans mon fichier img/tuiles (du genre 1.png, 32.png ect) j'ai par ailleurs 36 pièces différentes.
    Voici la fonction qui mélange ce tableau d'entiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int melange(){
        int random, temp;
     
        for(int i=0; i<=107; i++){
     
            srand(time(NULL));
            random = rand() % 108;
            temp = pioche[i];
            pioche[i] = pioche[random];
            pioche[random] = temp;
     
        }
    }
    Ensuite je tente d'afficher les valeurs pioche[0] puis ... jusqu'a pioche[5] pour le premier joueur (on remplit la main du joueur qui est de 6 pions) en les affichant dans la zone MAINX MAINY que j'ai préalablement define dans mon .h.
    Cette partie de code représente donc l'affichage des 6 pions (ici j'ai mis une seule carte pour faire mes test) dans la zone que j'ai défini juste au dessus :

    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
     
    void distribution(){
     
        melange(pioche);
     
        for(int i=0; i< NbIA + nbJoueur; i++){ //pour chaque joueur donc i<nombre de joueurs + nombre d'IA
     
            switch(i){
                case 0: //j1
                    for(int j=0; j < 1; j++){ //remplir les mains de 6 cases ici je met 1 pour mes test
     
                            mainj1[j] = pioche[posi_pioche];  //mainj1 et pioche sont des tableaux de valeurs numériques
     
                            sprintf(CheminImage, "img/tuiles/%d/.png", mainj1[j]);//les fichiers pnj portent les nom 00.pnj, 01.pnj ect ..
     
                            posi_pioche++;
     
                            all_xx = al_load_bitmap(CheminImage);
                            if (!all_xx)
                                erreur("al_load_bitmap(\"xx.png\")");
     
                            al_draw_bitmap(all_xx, MAINX1 + j*30, MAIN1Y, 0);
                            al_flip_display();
                            al_destroy_bitmap(all_xx);
     
                    }
                    break;
    L'erreur vient toujours de "erreur("al_load_bitmap(\"xx.png\")");"
    Cette fonction sert uniquement a donner la main des joueurs (ici que le premier car la fonction n'est pas aboutie encore)
    Et du coup j'ai décidé de virer cmainj1 qui était le tableau de char car sprintf(CheminImage, "img/tuiles/%d/.png", mainj1[j]); marche aussi aussi bien que si mainj1[j] était un char non ?)

    Ces deux fonctions vont être utilisées une seule fois dans mon programme : avant de commencer la boucle de jeu (ou on va poser les pions sur la grille ect ...)

    Je ne sais pas si c'est encore assez clair ! Vous avez besoin d'autres explications ? Désolé de prendre beaucoup de votre temps mais ca fait des heures et des heures que je cherche un solution

    En tout cas merci pour vos réponses précédentes elles m'ont déjà bien aidées !

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 14
    Par défaut
    euh gros malaise ...........
    j'ai recopié ton sprintf(CheminImage, "img/tuiles/%d/.png", mainj1[j]) sans réfléchir, il y a un / de trop .............
    C'est honteux de ma part lol

    Sur ce bonne journée !

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Akiwhite Voir le message
    Je ne sais pas si c'est encore assez clair !
    Ben déjà ça va beaucoup mieux.

    Citation Envoyé par Akiwhite Voir le message
    L'erreur vient toujours de "erreur("al_load_bitmap(\"xx.png\")");"... ca fait des heures et des heures que je cherche un solution
    T'as tenté de faire printf("[%s]\n", CheminImage) ? Juste pour vérifier que ce chemin contient le bon chemin. En plus il s'agit d'un chemin en relatif (il ne commence pas par "/") donc il dépend de l'endroit où toi tu te trouves quand tu lances ton programme (et non de l'endroit où se trouve ton programme).
    Accessoirement tu peux tenter un printf("%d\n", access(CheminImage, R_OK)) (faut inclure <unistd.h>). Ca t'affichera "0" si le fichier dont le nom est stocké dans "CheminImage" existe et que tu peux le lire. Et "-1" sinon.

    Citation Envoyé par Akiwhite Voir le message
    car sprintf(CheminImage, "img/tuiles/%d/.png", mainj1[j]); marche aussi aussi bien que si mainj1[j] était un char non ?)
    Oui, magie de printf(). Elle s'occupe elle-même de convertir un nombre numérique en string (pour les nombres non numériques là je sais pas trop). Accessoirement il ne faut pas mélanger dans un discours (ou dans un code) "char" et "char étoile" car ce ne sont pas la même chose. strcpy(x, y) (de ton premier exemple) veut deux char étoile en entrée, pas deux char. Un char c'est un caractère. Un char étoile c'est une adresse (et on a de grandes chances que ce soit l'adresse d'une string). Et attention, j'emploie le terme "string" pour simplifier car je sais que tous les habitués du C sauront traduire ce terme, mais le type "string" n'existe pas en C. En C, une string est représentée par un tableau de caractères dont l'un de ces caractères contient impérativement un '\0'.

    Sinon des remarques générales:
    • tu utilises des variables qui ne sont pas définies. Je sens ici des variables globales. Ok, tu as le droit, mais je t'assure que tu paieras à très court terme avec de lourds intérêts cette solution de facilité que tu as choisie parce que tu avais vite vite envie de coder et de voir le résultat sans prendre le temps de réfléchir sérieusement aux fondations de ton programme.
    • Il semble que tu vas gérer tes 6 pions de façon individuelle (le switch(), les noms "main1" laissant sous-entendre un "main2" arrivant plus tard, etc). Or c'est justement le propre et l'avantage des tableaux que de pouvoir stocker n items identiques (n ints, n char, n strings, n pions) et surtout de pouvoir leur faire appliquer un même traitement au moyen de boucles, traitement alors codé une seule fois.
    • tu ne sembles pas avoir compris l'utilité et le but du srand(time(NULL)). A moins que ce ne soit la définition du verbe "initialiser" qui te pose souci
    • le modulo ne te donne pas un aléatoire équiprobable. Bon ok là c'est juste pour ta culture perso (on s'en fout si les gros nombres sortiront plus souvent que les petits, à moins que ce ne soit l'inverse)

    Aucune de ces remarques ne remet en question ton code. Mais pour les deux premières, chacune d'elles te causera des difficultés plus ou moins importantes qui s'accroisseront avec l'évolution de ton programme et qui, toutes, pourraient être évitées.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre éclairé
    Homme Profil pro
    Autres
    Inscrit en
    Août 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Août 2008
    Messages : 39
    Par défaut
    Oui c'est exactement ce que je t'avais mis dans mon message avant de le retirer, car Sve@r t'explique certaines choses que tu devrais méditer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "img/tuiles/%d/.png", // rien ne te choque
    Avec des printf bien placer tu viens à bout de ce manque d'inattention. Encore mieux si tu sais te servir d'un GDB ou équivalent.


  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Proteiforme Voir le message
    avant de le retirer
    Pourquoi ? T'as le droit de parler, surtout si tu dis la même chose que moi

    Citation Envoyé par Proteiforme Voir le message
    "img/tuiles/%d/.png", // rien ne te choque
    Punaise, j'ai mis du temps avant de voir ce qui n'allait pas (mais cet aprem j'étais assez fatigué, j'ai même pas touché l'ordi de 18h à maintenant).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Membre éclairé
    Homme Profil pro
    Autres
    Inscrit en
    Août 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Août 2008
    Messages : 39
    Par défaut
    J’interviens très peu, car j'ai tendance à donner les réponses au lieu de mettre sur la voie pour qu'ils trouvent par eux même.
    N'est pas prof qui veut.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/12/2006, 17h33
  2. Probleme strcat et strcpy
    Par grincheux01 dans le forum C
    Réponses: 6
    Dernier message: 25/04/2006, 12h07
  3. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41
  4. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

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