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 avec fonction


Sujet :

C

  1. #1
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut Problème avec fonction
    Bonjour,
    j'ai une fonction qui me retourne un pointeur de chaîne de caracteres, mais lors de son appel ca bug, je ne sais ou je me suis gourer :s
    voilà le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    char *GetCardValue(CARD cDeck[],int cNum){
           char *vPointer,
                 buf[3];
             cNum%=13;
     
            if ((cNum<=9)&&(cNum>0)){
                 sprintf(buf, "%d", cNum);        
              strcpy(vPointer,buf);
              strcpy(vPointer,(" "+cDeck[cNum].Type));
              }
             else
              switch(cNum){
                 case 0:
                   strcpy(vPointer,("J "+cDeck[cNum].Type)); 
                    break;           
                 case 10:
                    strcpy(vPointer,("Q "+cDeck[cNum].Type)); 
                    break;
                 case 11:
                    strcpy(vPointer,("K "+cDeck[cNum].Type)); 
                    break;
     
                           } 
                     return(vPointer);      
         }
    Merçi d'avance

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Et tu alloues quand la mémoire nécessaire pour contenir la chaine pointée par vPointer ?

  3. #3
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par Pouic
    Et tu alloues quand la mémoire nécessaire pour contenir la chaine pointée par vPointer ?

    mouarf merçi j'suis bête j'ai carrément larguer ca lol

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    La remarque de Pouic résoud ton problème.
    Mais il te reste une chose à voir dans ton code :
    (1)cNum peut être égal à 12 et (2) cNum sera négatif si le paramètre (int) de la fonction est négatif. un default serait peut-être le bienvenu.

  5. #5
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    aye encore un problème lorsque j'affiche le resultat de cette fonction :s
    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
    char *GetCardValue(CARD cDeck[],int cNum){
           char *vPointer,
                 buf[3];
             cNum%=13;
            vPointer=malloc(48);
            if ((cNum<=9)&&(cNum>0)){
                 sprintf(buf, "%d", cNum);        
              strcpy(vPointer,buf);
              strcpy(vPointer,(" "+cDeck[cNum].Type));
              }
             else
              switch(cNum){
                 case 0:
                   strcpy(vPointer,("J "+cDeck[cNum].Type)); 
                    break;           
                 case 10:
                    strcpy(vPointer,("Q "+cDeck[cNum].Type)); 
                    break;
                 case 11:
                    strcpy(vPointer,("K "+cDeck[cNum].Type)); 
                    break;
     
                           }  
     
                     return(vPointer);      
         }
     
    void ShowDeck(CARD cDeck[MAX_CARDS]){
            int cpt;
     
           for (cpt=0; cpt<MAX_CARDS; cpt++)
             printf(">%s  \n",GetCardValue(cDeck,cpt));
         }
    quand je fais genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s",GetCardValue(Deck,12);
    eh ben ca m'affiche des choses autre que ce que je veux, je crois que c'est tout bête mais j'suis bigloux lol

  6. #6
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par diogene
    La remarque de Pouic résoud ton problème.
    Mais il te reste une chose à voir dans ton code :
    (1)cNum peut être égal à 12 et (2) cNum sera négatif si le paramètre (int) de la fonction est négatif. un default serait peut-être le bienvenu.
    non. parceque c'est limiter de 0 à 53

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Goundy :
    non. parceque c'est limiter de 0 à 53
    et si cnum = 12 ou 25 ou ... cnum %13 == 12 !!!
    printf("%s",GetCardValue(Deck,12);
    Justement cNum == 12!!!

  8. #8
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    oui t'as raison, j'suis perdu rholala lol.
    Je vais recalculer merci

  9. #9
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    j'ai corriger mon truc mais j'ai un probleme avec la fonction d'affichage:
    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
    char *GetCardValue(CARD cDeck[],int cNum){/*Avoir la valeur de la carte*/
           char *vPointer,
                 buf[3];
             cNum%=13;
            vPointer=malloc(48);
            if (cNum<=9 && cNum>0){
                 sprintf(buf, "%d", cNum);        
              strcpy(vPointer,buf);
              strcpy(vPointer,(" "+cDeck[cNum].Type));
              }
             else
              switch(cNum){
                 case 0:
                   strcpy(vPointer,("A "+cDeck[cNum].Type)); 
                     break;           
                 case 10:
                    strcpy(vPointer,("J "+cDeck[cNum].Type)); 
                     break;
                 case 11:
                    strcpy(vPointer,("Q "+cDeck[cNum].Type)); 
                     break;
                 case 12:
                    strcpy(vPointer,("K "+cDeck[cNum].Type));  
                     break;         
                           }  
     
                     return(vPointer);      
         }
    pour l'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void ShowDeck(CARD cDeck[MAX_CARDS]){/*Affichage du Deck*/
            int cpt;
            char* ptr;
     
           for (cpt=0; cpt<MAX_CARDS; cpt++){
              ptr=GetCardValue(cDeck,cpt);
             printf(">%s  \n",*ptr);
             }
         }

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           for (cpt=0; cpt<MAX_CARDS; cpt++){ 
              ptr=GetCardValue(cDeck,cpt); 
             printf(">%s  \n",*ptr); 
             }
    Erreur , tu imprimes une chaîne (%s) et tu passe un char (*ptr)

  11. #11
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    mouai mais ca m'affiche des chose bizzare avec size... j'y comprend rien :/

  12. #12
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    ca m'affiche des chose bizzare avec size...
    de quel genre ?
    qu'est ce que size ?

  13. #13
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            if (cNum<=9 && cNum>0)
            { 
                 sprintf(buf, "%d", cNum);        
              strcpy(vPointer,buf); 
              strcpy(vPointer,(" "+cDeck[cNum].Type)); 
              }
    Je suppose que le deuxième strcpy devrait être strcat . Non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            if (cNum<=9 && cNum>0)
            { 
                 sprintf(vPointer, "%d", cNum);        
                 strcat(vPointer,(" "+cDeck[cNum].Type)); 
              }

  14. #14
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    lol bon, il doit m'afficher par exemple:
    ...etc
    ben lui il m'affiche par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >sharedptr->size == sizeof(W32_EH_SHARED)
    des trucs comme ça, c'est bizzare :/

  15. #15
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par diogene
    [/code] Je suppose que le deuxième strcpy devrait être strcat . Non ?
    cela ne change rien

  16. #16
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    cDeck[cNum].Type
    Qu'est ce c'est ? peut-on voir la définition de CARD ?
    cela ne change rien
    Ca c'est sur mais le message est différent

  17. #17
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {/*Structure représentant chaque carte*/
            int Value;   /*Valeur de la carte*/
            char Type;   /*Type de la carte*/ 
            }CARD;
    voilà pour CARD.
    Il doit avoir un problème d'assignation dans la fonction GetCardValue je crois mais je ne sais ou est le probleme lol
    merci

  18. #18
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386

  19. #19
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Alors, ce type de construction est incorrect : "J "+cDeck[cNum].Type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(vPointer,(" "+cDeck[cNum].Type));
    la chaîne copiée va être a l'adresse de la chaîne " " + la valeur du char donc dans les décors. Ceci ne réalise pas la concaténation de la chaîne et du caractère

  20. #20
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il faut envisager qq chose du genre :
    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
    char *GetCardValue(CARD cDeck[],int cNum){/*Avoir la valeur de la carte*/ 
           char *vPointer; 
            vPointer=malloc(48); 
            if (cNum<=9 && cNum>0){ 
                 sprintf(vPointer, "%d  %c", cNum ,cDeck[cNum].Type);        
              } 
             else
             {
                char car ; 
                switch(cNum)
                { 
                 case 0  : car = 'A';  break;            
                 case 10: car = 'J';   break;
                 case 11: car = 'Q';  break; 
                 case 12: car = 'K';  break;
                 }  
               sprintf(vPointer, "%c  %c", car, cDeck[cNum].Type);
             }
             return(vPointer);      
      }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probléme avec fonction confirm
    Par hamzito dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/07/2006, 17h52
  2. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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