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 :

projet c:gestion d'un forum


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut projet c:gestion d'un forum
    bonjour,
    voila ,je dois rendre un projet c portant sur la gestion d'un forum .
    on doit pouvoir ajouter des thèmes de discussions,des sujets initiaux ,répondre a des messages....
    j'ai deja commencer le programme mais y'a un problème lors de l'exécution ca bugge dans la fonction répondre si vous pouvez m'aider s'il vous plait .merciii d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    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
    Par défaut
    1- La présence de ces trois variables globales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      theme *T[TAILLE];
      int n=0,code=1;
    me décourage complétement d'aller explorer le code (aller chercher tous les n dans le code...).
    De plus la présentation du code (indentation aléatoire) ne facilite pas la lecture.

    2- Quelques remarques faites par mon compilateur et qui auraient dû être faites par le tien si il était bien réglé.

    - Appels de fonctions sans prototype : il faut savoir que, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_msg_hierar();
    ne constitue pas un prototype puisque le type des arguments n'est pas spécifié. On doit écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_msg_hierar(void);
    - Une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void menu_deposer_sujet()
    {
    .....
                while(choix==1)
    Même erreur dans void menu_after_afficher()

    - La fonction msg* trouver_message(int code_msg) doit renvoyer une valeur , ce qui n'est pas toujours le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if(msg_rech==NULL) {printf("ce message n'existe pas");menu_after_afficher();}
        else return msg_rech;
    idem pour main() qui doit retourner un int


    3- Toutes ces fonctions qui n'ont pas de paramètres! Il faut les utiliser au lieu de passer par des variables globales

    4- Il y a d'autres erreurs après un coup d'oeil rapide.
    - Dans la première fonction appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void debut()
      {
    	char choix;
    ....
    		scanf("%d",&choix);
    choix n'est pas un int, comme le suppose le format "%d" --> plantage.
    Avec scanf, il faut que la variable de destination soit parfaitement en accord avec le format.
    Pourquoi cette construction baroque pour cette fonction au lieu d'avoir :
    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
    void debut()
    {
       int choix;
       do
       {
         MenuPrincipal();
         scanf("%d",&choix);
         switch(choix)
         {
          case 1: menu_ajout_theme();
                  break;
          case 2: menu_deposer_sujet();
                  break;
          case 3: menu_afficher();
                  break;
         }
         getch();
       }while(choix!=0);
    }
    - void afficher_theme_ordre_alphabetique() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char *copie[n];
    if(n==0) printf("aucun theme n'a encore ete saisi");
    else
    {
    Le test est trop tard : si n==0 on a essayé de créer un tableau de taille nulle ce qui n'est pas permis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(n==0) printf("aucun theme n'a encore ete saisi");
    else
    {
       char *copie[n];
    Ceci ne peut pas marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *p=(char *)malloc(sizeof(char));
    strcpy(p,T[i]->nomdetheme);
    On n'a réservé que 1 char avec le malloc(), juste de quoi mettre le '\0' terminal. Le strcpy() va faire planter sauf si la chaine à copier est...vide

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void tri_nom(char *tab[]) : 
        char *ech;
    ....
        strcpy(ech,tab[i]);
    va planter : on n'a réservé cette fois aucune place pour faire la copie

    etc.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut
    voila le code aprés modification .mais je trouve tjr pas le problème de la fonction repondre (j'ai essayer de voir si le probleme étai dans la recherche du msg )je trouve pas !!
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    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
    Par défaut
    Tu n'as pas pris en compte ces remarques importantes :
    Ceci fait planter le programme
    - void afficher_theme_ordre_alphabetique() :
    .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *p=(char *)malloc(sizeof(char));
    strcpy(p,T[i]->nomdetheme);
    ni celle-ci qui va faire aussi planter le programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void tri_nom(char *tab[]) : 
        char *ech;
    ....
        strcpy(ech,tab[i]);
    Et il y a toujours ces globales !!!

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut
    pour la première remarque j'ai mis l'allocation de la mémoire à l'interieur du while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     while(i<n)
     {
              char *p=(char*)malloc(sizeof(char));
               strcpy(p,T[i]->nomdetheme);
               copie[i]=p;
                 i++;
     
       }

    sinon pour le seconde je ne vois pas ce que je peux faire
    ech est bien un pointeur sur char
    et tab[i] aussi nn ??


    pour les variables globales aussi ,elles sont utilisées tout au long du programme ,je ne vois pas comment les enlever !!

  6. #6
    Expert confirmé
    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
    Par défaut
    pour la première remarque j'ai mis l'allocation de la mémoire à l'interieur du while
    Mais chaque allocation alloue 1 unique byte. Dans un tel tableau, on ne peut mettre qu'une chaine vide
    ech est bien un pointeur sur char
    Mais un pointeur n'est pas fait pour stocker des chaines de caractères mais pour stocker des adresses. Il n'y a pas de tableau dans lequel stocker les caractères.
    et tab[i] aussi nn ??
    Oui, mais tab[i] est censé contenir l'adresse d'un tableau de caractères. C'est dans ce tableau que le strcpy() va chercher les caractères à copier et il veut les copier à l'adresse qui est dans ech. Mais dans ech, il n'y a pas l'adresse du début d'un tableau !

Discussions similaires

  1. [MCD] Projet de gestion d'un parc de matériel informatique
    Par merimac dans le forum Schéma
    Réponses: 15
    Dernier message: 20/12/2013, 10h33
  2. Architecture projet de gestion avec dynamisme
    Par n8ken dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 15
    Dernier message: 20/04/2009, 15h41
  3. Rendre invisible projet dans Gestion de tâches
    Par cocot dans le forum Delphi
    Réponses: 2
    Dernier message: 29/01/2007, 16h45

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