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 :

Problème de tableau (cast)


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut Problème de tableau (cast)
    Bonjour,

    --I/Présentation

    Je fais actuellement un jeu consistant à créer un jeu du pendu sur console(comme demandé ds le tuto que je suis.

    --II/Le Code

    Mais voila je rencontre un problème que je n'arrive VRAIMENT pas à résoudre.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    //--------------------------TP:Jeu Du Pendu---------------------------------------------------------------------------------------
     
    char lireCaractere() {
        char caractere = 0;
     
        caractere = getchar(); // On lit le premier caractère
        caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
     
        // On lit les autres caractères mémorisés un à un jusqu'au \n (pour les effacer)
        while (getchar() != '\n') ;
     
        return caractere; // On retourne le premier caractère qu'on a lu
    }
     
    void jeuDuPendu(){
        char motMystere[]="MARRON";
        char newCa;//newCa=nouveau caractere cad celui que l'utilisateur rentre
        int nbreCo=0;//nbreCo=nombre de coups joué
        int nbreCa=strlen(motMystere);//nbreCa=nombre de Caractere
        int *pointNbreCa=&nbreCa;//*pointNbreCa:contient l'adresse de la var nbreCa
        int nbreVie=10;//nbreVie=nombre de vie
        printf("nbre de Cara:%d\n",nbreCa);
        char motMasque[*pointNbreCa];//Ce qui s'affiche à l'ecran
        int h=0,i=0,j=0,k=0;//autres compteurs
        int tabTmp[j];//Ds ce tableau se trouveront mémorisé les indices des endroits ou il y eu une correspondance entre le"motMystetre"est"newCa"
     
        for(h=0;h<*pointNbreCa;h++){
            motMasque[h]="*";
            if(h==*pointNbreCa-1){
                printf("--mot mystere:%s",motMasque);
            }
        }
     
        /*char motMasque=malloc(nbreCa * sizeof(char));
        if(motMasque=NULL){
            exit(0);
        }else{
            for(h=0;h<=*pointNbreCa;h++)
                motMasque="*";
                if(h==*pointNbreCa){
                    printf("--mot masque:%s",motMasque);
                }
        }*/
     
     
        for(nbreCo=0;nbreCo<nbreVie;nbreCo++){
            newCa=lireCaractere();
            for (i=0;i<nbreCa;i++){//On Verifie(par comparaison)si la lettre rentrée existe ds le"motMystere"
                if(newCa==motMystere[i]){
                    j++;
                    nbreCo=nbreCo-1;
                    tabTmp[j]=i;
                }
            }
            for(k=0;k<=j;k++){//Ici on va écrire les lettres à leurs emplacement
                int indice=tabTmp[j];
                motMasque[indice]=newCa;
            }
            printf("--motMystere:%s",motMasque);
        }
     
    }
     
    //----------------------FIN:TP:Jeu Du Pendu---------------------------------------------------------------------------------------
    --III/Les erreurs

    Le prb se situe à la ligne 28(ici:)

    Comme vs pouvez le voir j'ai éssayé de différentes de manière(ds les coms):tableau dynamique...etc.

    Voila le message d'erreurqui correspond à la ligne 28)
    Nom : Capture.JPG
Affichages : 126
Taille : 20,5 Ko

    Voila ce que la console renvoie(au début car plus on avance,cad qu'on joue plus sa beug :'( )
    Pièce jointe 157452

    Svp j'ai vraiment besoin d'aide je ne sais vraiment pas ce qui ne va pas

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    motMasque[h] attend un caratère, ici lui est envoyé une chaine. ("*")

    Ceci devrait mieux passer

  3. #3
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Pillo//
    Oui tu as raison c'est bien ça merci à toi tu ne sais pas comment j'ai galéré sur ce truc T'es un chef.



    De plus je rencontre encore 2 problèmes:

    Problème 1 :
    -Il y a toujours ce caractère aléatoire à la fin du mot je pense, que c'est du au manque de"\0".A la fin.

    Problème 2 :
    -Mon code n'arrive pas à détecter quand il y a deux lettres.

    Je vais y réfléchir car je viens de m'y mettre.Mais bon gagner un peu de temps c'est pas mal quand mm


    EDIT:

    Problème 1 résolu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(h=0;h<=*pointNbreCa;h++){
            motMasque[h]='*';
            if(h==*pointNbreCa){
                motMasque[h]='\0';
                printf("--mot mystere:%s\n",motMasque);
            }
        }
    Merci à vous.

  4. #4
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Re ! Mais de rien !

    Quelques petites choses :

    Sur la capture d'écran je vois pas mal de warning, as tu inclus tout ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    Pourquoi ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *pointNbreCa=&nbreCa;//*pointNbreCa:contient l'adresse de la var nbreCa
    Remplace *pointNbreCa par nbreCa, ça revient au même pour l'utilisation qu'il en est fait.

    Il y a toujours ce caractère aléatoire à la fin du mot je pense, que c'est du au manque de"\0".A la fin.
    Bingo !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        for(h=0;h<nbreCa;h++){
            motMasque[h]='*';
            if(h==nbreCa-1){
                printf("--mot mystere:%s",motMasque);
            }
        }
    Bien compliqué je trouve, pourquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        for(h=0;h<nbreCa;h++)
            motMasque[h]='*';
     
        motMasque[nbreCa]='\0';//Ne pas oublier !!!
     
        printf("--mot mystere:%s",motMasque);
    Plus il y a de fonctions, plus il est facile de les tester indépendemment pour s'assurer quelles fassent bien ce qu'on leurs demande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        printf("--motMystere:%s",lireCaractere());
        return 0;
    }
    Essai ceci

  5. #5
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @PilloBuenaGente//

    Re-Bonjour,

    1-Les warning.
    Il ni a pas de problème majeurs,actuellment. Ce n'est que des remarques concernant le fait que j'ai mis des "/*" ds mes com.

    2-Sur la boucle et le test
    Tu as raison j'ai essayé de simplifier. As tu lu mon edit?

    3-Sur les pointeurs:
    En fait tu as raison mais c'était qd j'étais entrain de résoudre mon problème (voir ma 1ére question)que je les ai mis ,et parés je les ai gardés ds le code je vais le clarifier mtn.

    4-Sur la mise en forme du code.
    Je commence par écrire mon algo sur papier avec un papier et un stylo en étayant bien toutes les étapes et écrire les raisonnements et en n'utilisant pas de langage informatique.Je préfère cette méthode elle me fait gagner un temps fou comparé à avant ou j'y allé au feeling et au petit bonheur la chance .Je te dis tout ça pour te dire que malgré que le code paraisse lourd je le maitrise,son raisonnement et ses principales étapes très bien(mise à part les erreurs inhérents au langage comme les '' au lieu des "").
    Si tu veux que te l'écrive dis le moi.

    -Prb:
    Tout mon mot s'écrit sauf les lettres en doubles qui elles ne s'écrivent qu'une seule fois.
    exemple:
    mot Marron.
    ******
    ->je tape R
    **r***
    ->je re tape R =>ERREUR!!!

    PS:Mon code a un peu changer depuis le début si tu le veux le revoir demande.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Points : 42
    Points
    42
    Par défaut
    Est ce que tu compiles avec tous les messages d'erreurs et warning (-W -Wall -Wextra)?

    De plus je ne comprends pas ta dernière boucle. Tu fais une itération sur k mais tu ne l'utilise pas.

    Ensuite, penses-tu que ton tableau temporaire des indices des lettres trouvées (tabtmp ou quelque chose dans le genre ^^') est vraiment utile? As-tu essayé de remplacer directement dans le mot masqué les lettres identiques au mot recherché aux mêmes indices?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While (motMystere[i])
    {
    if (newCa == motMystere[i])
    motCache[i] == motMystere[i];
    i++;
    }
    Enfin dans la partie ou tu révèles les lettres trouvés tu décrémentes le nombre d'essais pour chaque nouvelle lettre trouvé. Même quand elles sont en double. (Dans ton exemple tu dois révéler les deux 'r' en même temps, mais pour un essai tu perds deux "vies").

  7. #7
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Toadster//

    Salut,

    Je te prie de m'excuser de ne pas pouvoir répondre tt de suite aux messages,malheureusement je ne peux pas consacrer autant de temps que je le voudrais à ce sujet étant donné que je ss un tuto sur le web j'ia d'autres obligations à coté.

    Citation Envoyé par Toadster Voir le message

    Ensuite, penses-tu que ton tableau temporaire des indices des lettres trouvées (tabtmp ou quelque chose dans le genre ^^') est vraiment utile? As-tu essayé de remplacer directement dans le mot masqué les lettres identiques au mot recherché aux mêmes indices?
    Bah justement j'ai créé ce tableau pour gérer les cas ou on ne il y a une seule lettre mais présente plusieurs fois ds le mot.Cependant ça ne fonctionne pas je me demande pk?

    EDIT:En réalité les indices de la ou se trouve la lettre correspondante st correctement stockés c'est cette partie qui ,je pense ne fonctionne pas comme je le voudrais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(k=0;k<=j;k++){//Ici on va écrire les lettres à leurs emplacement
                int indice=tabTmp[j];
                motMasque[indice]=newCa;
                if(k==j){
                printf("--motMystere:%s\n",motMasque);
                printf("->indice: %d valeur correspondante:%d\n",j,indice);
            }
    Plus précisément de cette ligne:

  8. #8
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    Résolu:

    PRB des 2 lettres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        for(nbreCo=0;nbreCo<nbreVie;nbreCo++){
            newCa=lireCaractere();
            for (i=0;i<nbreCa;i++){//On Verifie(par comparaison)si la lettre rentrée existe ds le"motMystere"
                if(newCa==motMystere[i]){
                    motMasque[i]=newCa;
                }
            }
            printf("--mot masque:%s",motMasque);
        }

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

Discussions similaires

  1. Débutant en Javascript : problème de tableau !
    Par bluheim dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/11/2005, 15h03
  2. [XHTML] problème de tableau
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/04/2005, 07h18
  3. Problème de tableau
    Par tom06440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/04/2005, 20h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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