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 :

je ne sais pas pourquoi ce code ne marche pas!


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut je ne sais pas pourquoi ce code ne marche pas!
    salut
    j'ai une fonction qui permet de modifier une opération (il s'agit des opérations de gestion d'une biliothéque
    par exemple emprunt ,remise ...)
    pour cela je demande à l'utilsateur de taper le numéro de l'opération à modifier ,j'effectue une recherche
    et dés que je trouve le numéro correspondant j'affiche un menu comportant les different choix de modifiction(par modifier le numéro de l'opération , modifier le nom de l'opération ...)
    voici mon essai :
    tout d'abord les structures :
    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
    struct information_operation
      {
           char nom_operation[20];
           int num_operation;
            char date[12];
           char id_lecteur[50];
           char id_code_livre[50];
      };
     
    typedef struct operation 
      {
           struct information_operation inf_op;  //c une structure comprotant les informations .
           struct operation *suivant;
      }maillon;
    typedef maillon* liste ;
    et puis la fonction modifier :
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    liste modification(liste l)
       {
              liste tmp=l;
              int temprairePourInt;
              char *temprairePourchaine;
              int numAmodifier,continue3=1,choix3;
           if(tmp==NULL)
               printf(\"la liste est vide \");
            else 
     
              { 
              {
                 printf(\"taper le numero de l\'opération à modifier\");
                 scanf(\"%d\",&numAmodifier);
               }
            //cherchons l\'opération qui corespond 
           while ((tmp->suivant!=NULL)&&(tmp->inf_op.num_operation!=numAmodifier))
               {
                  tmp=tmp->suivant;
               }
           if (tmp->suivant!=NULL)
               {
                   printf(\"la numero d\'opération n\'existe pas \");
                   return NULL;
               }
           else
               { 
                 system(\"cls\"); 
           gotoxy(15,5);
           printf(\"Voulez vous modifier ?\");
     
           gotoxy(20,7);
           printf(\"1.le nom de l\'opération.\");
     
           gotoxy(20,9);
           printf(\"2.le numéro de l\'opération\");
     
           gotoxy(20,11);
           printf(\"3.date\");
     
     
           gotoxy(20,15);
           printf(\"4.l\'id  de lecteur \");  
     
           gotoxy(20,17);
           printf(\"5.le code de livre  \");  
     
           gotoxy(20,19);
           printf(\"6.Quitter la modification  \");    
     
           printf(\"Taper votre choix:\");
           scanf(\"%d\",&choix3);
             switch(choix3)
          {
            case 1:
                 temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.nom_operation)+1);
                 printf(\"taper le nouveau nom de l\'opération(REMISE ou EMPRUNT\");
                 scanf(\"%s\",temprairePourchaine);
                 strcpy(tmp->inf_op.nom_operation,temprairePourchaine);   
                       //continue3=0;  
                       break;
           case 2:
                 printf(\"taper le nouveau numero\");
                 scanf(\"%d\",&temprairePourInt);
                 tmp->inf_op.num_operation=temprairePourInt;
                       //continue3=0;  
                       break;
            case 3:
                   temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.date)+1);
                   printf(\"taper le nouvelle date\");
                   scanf(\"%s\",temprairePourchaine);
                   strcpy(tmp->inf_op.date,temprairePourchaine);   
                       //continue3=0;      
                       break;  
             case 4:
                 temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.id_lecteur)+1);
                 printf(\"taper le nouveau id lecteur\");
                 scanf(\"%s\",temprairePourchaine);
                 strcpy(tmp->inf_op.date,temprairePourchaine);
                      //continue3=0;      
                      break;
             case 5:
                temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.id_code_livre)+1);
                printf(\"taper le nouveau id lecteur\");
                scanf(\"%s\",temprairePourchaine);
                strcpy(tmp->inf_op.id_code_livre,temprairePourchaine);
                     //continue3=0;   
                     break;
             case 6:
                      break;
             default :
             gotoxy(20,16);
                printf(\"attenction \");        
     
            } 
    }while(choix3!=1); 
    }
    }
    mais ou' est le probléme?!
    en fait il y a deux problémes lors de l'exécution:
    si j'ajoute une nouvelle opération et je le modifie et puis aprés la modification j'affiche l'opération ,le executable se plante !
    autre probléme ,lorsque je donne un numero d'opération qui n'existe pas ,le menu s'affiche comme si ce numéro existe !!!!

    merci de m'aidez à compiler mon programme corréctement !

    A+

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.nom_operation)+1);
     
    strcpy(tmp->inf_op.nom_operation,temprairePourchaine);
    attention strlen te retourne la longueur en gros le nombre de caractère rencontrés avent le premier '\0' de la chaine pas la taille alloué (ici 20 en dur au vu de la structure.

    de plus ton code ne montre pas comment tu initlialise tes structures si tu fait
    inf_op.nom_operation[0] = '\0' par exemple strlen te retournera 0 alors que sizeof devrais te retourner 20

    Ensuite utilise CODE au lieu de QUOTE ce sera plus lisible.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    donne nous un code (entier) qui compile, et indenté !
    et utilise les balises code pas citation !
    et pourquoi échape tu les quotes et double quotes ?

    sinon tu fais un
    qui devrait plutot etre un:
    puisque 6 correspond au choix "quitter"
    et je ne vois pas de do associé à ton while !

    au risque de me répéter, un code mal indenté est illisible et ne donne pas envie d'aider....
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    ok je veux prendre tout cela en considération et même j'ai fait quelque modification sur le code (il y avait plein d'erreurs ).
    pour le malloc cela ne va pas poser de probleme car ,heursement,sizeof(char)=1.
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    liste modification(liste l)
       {
              liste tmp=l;
              int temprairePourInt;
              char *temprairePourchaine;
              int numAmodifier,continue3=1,choix3;
           if(tmp==NULL)
              {
                         printf("la liste est vide ");
                         getch();
                         return NULL;
                         }          
            else 
     
              { 
     
                 printf("taper le numero de l'opération à modifier");
                 scanf("%d",&numAmodifier);
              }
            //cherchons l'opération qui corespond 
           while ((tmp->suivant!=NULL)&&(tmp->inf_op.num_operation!=numAmodifier))
               {
                  tmp=tmp->suivant;
               }
           if (tmp->suivant==NULL)
               {
                   printf("la numero d'opération n'existe pas ");
                   getch();
                   return NULL;
     
                   }
      do
      {           system("cls"); 
           gotoxy(15,5);
           printf("Voulez vous modifier ?");
     
           gotoxy(20,7);
           printf("1.le nom de l'opération.");
     
           gotoxy(20,9);
           printf("2.le numéro de l'opération");
     
           gotoxy(20,11);
           printf("3.date");
     
     
           gotoxy(20,15);
           printf("4.l'id  de lecteur ");  
     
           gotoxy(20,17);
           printf("5.le code de livre  ");  
     
           gotoxy(20,19);
           printf("6.Quitter la modification  ");    
     
           printf("Taper votre choix:");
           scanf("%d",&choix3);
           switch(choix3)
          {
            case 1:
                 temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.nom_operation)+1);
                 printf("taper le nouveau nom de l'opération(REMISE ou EMPRUNT");
                 scanf("%s",temprairePourchaine);
                 strcpy(tmp->inf_op.nom_operation,temprairePourchaine);   
                       //continue3=0;  
                       break;
           case 2:
                 printf("taper le nouveau numero");
                 scanf("%d",&temprairePourInt);
                 tmp->inf_op.num_operation=temprairePourInt;
                       //continue3=0;  
                       break;
            case 3:
                   temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.date)+1);
                   printf("taper le nouvelle date");
                   scanf("%s",temprairePourchaine);
                   strcpy(tmp->inf_op.date,temprairePourchaine);   
                       //continue3=0;      
                       break;  
             case 4:
                 temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.id_lecteur)+1);
                 printf("taper le nouveau id lecteur");
                 scanf("%s",temprairePourchaine);
                 strcpy(tmp->inf_op.date,temprairePourchaine);
                      //continue3=0;      
                      break;
             case 5:
                temprairePourchaine=(char *)malloc(sizeof(char)*strlen(tmp->inf_op.id_code_livre)+1);
                printf("taper le nouveau id lecteur");
                scanf("%s",temprairePourchaine);
                strcpy(tmp->inf_op.id_code_livre,temprairePourchaine);
                     //continue3=0;   
                     break;
             case 6:
                      break;
             default :
             gotoxy(20,16);
                printf("attenction ");        
     
            } 
    }while(choix3!=6);
    et voilà le main :
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    int main()
    {
        /*Menu de choix d'opération*/
        liste liste_operation=NULL;
    do
    {
        system("cls"); //~clrscr():;
    gotoxy(15,5);
              printf("les opérations de gestion ");
    gotoxy(20,7);
              printf("1.Emprunt");
    gotoxy(20,9);
              printf("2.Remise");
    gotoxy(20,11);
              printf("3.Quitter");
    gotoxy(20,15);
          printf("\nTaper votre choix:");
          scanf("%d",&choix1);
     
    switch(choix1)
          {
            case 1:
                  strcpy(aux,"Emprunt");
                  break;
            case 2:
                  strcpy(aux,"Remise");
                  break;
            case 3:
                  exit(0);   
          default :
                  gotoxy(20,16);
                         printf("attenction !"); 
                         getch();       
          } 
    }
    while((choix1==0)||(choix1>3));   
     
    /*Menu de type d'opération */
    //tout d'abrd il faut effacer l'ecran 
    do
    {
       system("cls"); 
    gotoxy(15,5);
       printf("les types d'opération ");
    gotoxy(20,7);
       printf("1.Ajout");
    gotoxy(20,9);
       printf("2.Suppression");
    gotoxy(20,11);
       printf("3.modification");
    gotoxy(20,13);
       printf("4.Affichage");
    gotoxy(20,15);
       printf("5.Quitter");
               printf("\nveuillez taper votre choix:");
               scanf("%d",&choix2);
    switch(choix2)
          {
            case 1:
                  liste_operation=ajout(liste_operation,aux);
                  break;
            case 2:
                  liste_operation=suppresssion(liste_operation);  
                  break;
            case 3:
                  liste_operation=modification(liste_operation);
                  break;  
            case 4:
                  affiche(liste_operation);
                  break;  
            case 5:
                exit(0); 
            default :
                 gotoxy(20,16);
                       printf("attenction ");        
           }
           }while(choix2!=5);
    getch();
    return 0;
    }
    a+

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/05/2014, 15h28
  2. [AC-2007] pourquoi mon code ne marche pas
    Par erebios dans le forum VBA Access
    Réponses: 16
    Dernier message: 04/05/2010, 23h43
  3. diaporama: pourquoi mon code ne marche pas
    Par secondechance dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/05/2009, 02h04
  4. je ne sais pas pourquoi ce code ca marche pas
    Par debutantasp dans le forum ASP
    Réponses: 14
    Dernier message: 23/11/2007, 17h10
  5. Réponses: 2
    Dernier message: 31/07/2006, 08h48

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