Correction code C

Signaler
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour,

j'ai un code en C mais lors de la compilation/execution des erreurs s'affichent et je ne sais pas à quoi elles correspondent. Je suis débutant pouvez vous m'aider?

Le programme est censé gérer une bibliotheque (auteur, titre livre, lecteur etc.)

merci

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <windows.h>

int main(int argc, char *argv[])
{

typedef struct
{
int jour;
int mois;
int annee;
}date;
typedef struct bib   /*creation du type bib*/
{
int isbn;
char titre[60];   /*declaration tableaux de caracteres pour titre,auteur avec 60 caracteres max*/    
char auteur[60];
char code[6];
float prix;
date day;
}bib;
int recherche(bib t[],int n,int x);   
void cadre(int dc,int fc,int dl,int fl,int c)
{
int i;
textcolor(c);
cprintf("É");
cprintf("È");
cprintf("»");
cprintf("&#188;");
cprintf("º");
cprintf("º");
cprintf("Í");
cprintf("Í");
}
void menu();
void remplissage(bib t[],int* n)
{
int j;float x;
int i1;
do
{

clrscr();
printf("bouquin numero %d",*n);
getch();
clrscr();
cadre(5,75,3,36,2);
puts("ISBN        :");
puts("TITRE       :");
puts("AUTEUR      :");
puts("EDITEUR     :");
puts("PRIX        :");
puts("DATE EDITION:");
clreol();scanf("%d",&t[*n].isbn);}while(recherche(t,*n,t[*n].isbn)!=0);
clreol();scanf("%s",t[*n].titre);}while(strlen(t[*n].titre)>20);fflush(stdin);
clreol();scanf("%s",t[*n].auteur);}while(strlen(t[*n].auteur)>20);fflush(stdin);
clreol();scanf("%s",t[*n].code);}while(strlen(t[*n].code)>20);fflush(stdin);
scanf("%f",&x);t[*n].prix=x;
clreol();scanf("%d%d%d",&t[*n].day.jour,&t[*n].day.mois,&t[*n].day.annee);}while(t[*n].day.jour<=0||t[*n].day.jour>31||t[*n].day.mois<=0||t[*n].day.mois>12);

printf("continuer(1/0)?");
scanf("%d",&j);
*n+=1;
}while(j!=0||*n>100);/*on suppose que notre gestionnaire ne peut supporter plus que 100 bouquins*/
menu();
}/*fin de gestion de remplissage*/

void tri_auteur(bib t[],int n)
{
int i,j;
bib x;

      for(i=0;i<n;i++)
      {
for(j=i+1;j<n;j++)
{
if(strcmp(t[i].auteur,t[j].auteur)>0)
{
x=t[i];
t[i]=t[j];
t[j]=x;
}
}
      }

}
void tri_annee(bib t[],int n)
{
int i,j;
bib x;


for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(t[i].day.annee>t[j].day.annee||t[i].day.annee%100!=0&&t[i].day.annee%400==100&&t[j].day.annee%100==0&&t[j].day.annee%400!=100)//on a ajouté au controle de l'annee le fait que si la premiere annee est ou non bisextille
{
x=t[i];
t[i]=t[j];
t[j]=x;
if(t[i].day.mois<t[j].day.mois)
{
                           x=t[i];
t[i]=t[j];
t[j]=x;
                    }                          
}

}
}


}

void aff1(bib t[],int *n)
{
int i;

clrscr();
tri_auteur(t,*n);
for(i=0;i<=*n;i++)
{
puts("ISBN          :");
puts("TITRE         :");
puts("AUTEUR        :");
puts("EDITEUR       :");
puts("PRIX          :");
puts("DATE D'EDITION:");
printf("%d",t[i].isbn);
puts(t[i].titre);
puts(t[i].auteur);
puts(t[i].code);
printf("%f",t[i].prix);
printf("%d/%d/%d",t[i].day.jour,t[i].day.mois,t[i].day.annee);
getch();
}


printf ("retour au menu principale dans 3sec!!");
delay(3000);
}
void aff2(bib t[],int *n)
{
    int i;

clrscr();
tri_annee(t,*n);
for(i=0;i<*n;i++)
{

puts("ISBN          :");
puts("TITRE         :");
puts("AUTEUR        :");
puts("EDITEUR       :");
puts("PRIX          :");
puts("DATE D'EDITION:");
printf("%d",t[i].isbn);
puts(t[i].titre);
puts(t[i].auteur);
puts(t[i].code);
printf("%f",t[i].prix);
printf("%d/%d/%d",t[i].day.jour,t[i].day.mois,t[i].day.annee);
getch();
}

printf("retour au menu principale dans 3sec!");
delay(3000);
}
int recherche2(bib t[],int n,int x);
int recherche(bib t[],int n,int x)
{
int i,j,find=0;
for(i=0;i<n;i++)
{
if(t[i].isbn==x){find=1;break;}
}
return find;
}

int recherche2(bib t[],int n,int x)
{
int i,j,find=0;
for(i=0;i<n;i++)
{
if(t[i].isbn==x){find=i;break;}
}
return find;

}

void add(bib t[],int *n)
{
remplissage(t,n);
menu();
}
void sup(bib t[],int *n,int num)
{

int i;
int find;
clrscr();
if(*n==0){clrscr();printf ("rien &#8230; supprimer");}
else
{
clrscr();
find=recherche2(t,*n,num);
if(find==0)
{clrscr();printf("element introuvable...impossible de supprimer");}
else
{
for(i=find;i<*n;i++)
t[i]=t[i+1];
*n=*n-1;
printf("&#8218;l&#8218;ment supprim&#8218; avec succŠs");
}
}
}
void modif(bib t[],int n,int x)
{

int i,found;float price;
found=recherche(t,n,x);
clrscr();
if(found==0){clrscr();system("PAUSE");}
else
{
puts("entrer votre prix:");
scanf("%f",&price);
t[found].prix=price;
}
}
void menu()
{
     //declaration des variables necessaires au traitement
    bib t[100];
    int i;
    int x;
    int isbn1;
    int choix,CC;
    int r;//recherche de l'isbn en cas de modification du prix d'un bouquin
    char menu2[2][81]={"1-Par auteur","2-Par annee"};
    char men[5][81]={"1-Remplissage.","2-Affichage.","3-Tri(par auteur/par annee).","4-Recherche.","5-Mises à jour"};
    char menu3[2][81]={"1-Par auteur.","2-Par date."};
    char menu4[3][81]={"1-Ajout bouquin.","2-Suppression bouquin.","3-modification prix."};
    int leprix;
    int C1,C2,C3;
    int n;n=0;
    //debut de traitement
    clrscr();
    cadre(5,75,3,36,1);//construction du cadre du menu principal-->remarque:la même fct de cadre sera  appelée +rs fois
    for(i=0;i<5;i++)
    {puts(men[i]);}
    printf ("entrer votre choix:");
    scanf("%d",&choix);
    switch(choix)
    {
case 1:clrscr();
cadre(5,75,3,36,1);
remplissage(t,&n);
menu();
break;
case 2:clrscr();
cadre(5,75,3,36,1);
for(i=0;i<2;i++)
    {puts(menu2[i]);}
puts("entrer votre choix:");
scanf("%d",&C1);
switch(C1)
{
    case 1:aff1(t,&n);
    menu();
    break;
    case 2:aff2(t,&n);
    menu();
    break;
}
break;
case 3:clrscr();
cadre(5,75,3,36,1);

for(i=0;i<2;i++)
{puts(menu3[i]);}
puts("entrer votre choix:");
scanf("%d",&C2);
switch(C2)
{
    case 1:tri_auteur(t,n);
menu();
break;
    case 2:tri_annee(t,n);
    menu();
    break;
}
break;
case 4:clrscr();
puts("entrer isbn:");
scanf("%d",&x);
CC=recherche2(t,n,x);
printf("%d",CC);
if(CC==x) printf("bouquin TROUVE");
else if(CC==0)printf("bouquin introuvable!!");
getch();
menu();
break;
case 5:clrscr();
cadre(5,75,3,36,1);
for(i=0;i<3;i++)
{puts(menu4[i]);}
puts("entrer votre choix:");
scanf("%d",&C3);
switch(C3)
{
case 1:clrscr();
cadre(5,75,3,36,1);
add(t,&n);
menu();
break;
case 2:clrscr();
cadre(5,75,3,36,1);
clrscr();
printf("entrer l'isbn:");
scanf("%d",&isbn1);
sup(t,&n,isbn1);
menu();
break;
case 3:clrscr();
cadre(5,75,3,36,1);
clrscr();
printf("entrer le prix:");
scanf("%d",&leprix);
clrscr();
puts("entrer isbn:");
scanf("%d",&isbn1);
r=recherche(t,n,isbn1);
if(r){
modif(t,n,leprix);
printf("prix modifié avec succes");
getch();
}
else {clrscr(); getch();}
menu();
}
getch();
menu();
break;
    }
}
void main()
{
clrscr();
menu();
getch();
}
  
}

57 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Tu ne fois pas tout mettre dans le code de main() ! Mets-y seulement son propre code.
102 erreurs quand je compile ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
dois*

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
T'as vu les pointeurs et listes chainées ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

merci pour la rep

oui j'ai vu mais rapidement jai pas trop dexperience.

tu pourrais m'aider à refaire le code?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Revois déjà çaet recommence ensuite ton programme en les utilisant (donne le code de ta structure pour stocker les livres avant de commencer).

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

hmm je n'y arrive pas..

j'ai besoin d'un code où:

-on a enregistré le titre, l'auteur et code des livres
-on peut ajouter ou supprimer une fiche lecteur(nom, prenom,livres empruntés)
-on peut consulter les fiches des livres et leur emprunts

mais je suis perdu
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Crée déjà une structure qui contiendra les données d'une fiche en liste simplement chainée. La réponse que j'attends doit être sous la forme typedef struct _mastructure {int truc; char autre[20]; struct _mastructure* _next;} mastructure; .

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

j'ai ce morceau de code pour déclarer mes structures:

//************ declaration des structures ************

typedef struct struct_document
{
int code_doc;
char titre_doc[40];
char auteur_doc[40];
}document;

typedef struct struct_lecteur
{
int code_lec;
char nom[40];
char prenom[40];
}lecteur;

typedef struct struct_date
{
int jour,mois,annee;
}date;

typedef struct struct_pret
{
int code_doc;
char titre_doc[40];
char auteur_doc[40];
int code_lec;
char nom[40];
char prenom[40];
int pret_j, pret_m, pret_a;
int retour_j, retour_m, retour_a;
}pret;



après c'est le prog principal?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Peut-être commencer par une structure pour les livres et puis seulement pour les prêts ... Et j'avais parlé de liste chainée !

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

tu peux me donner un exemple pour que je fasse pareil pour les autres stp
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
//Structure générique pour les dates
typedef struct _SDate
{
char day;
char month;
short year;
} SDate; //4 octets

//Structure pour le stockage des infos d'un livre
typedef struct _SBook
{
char isbn[14];
char title[60];
char author[50];
char publisher[20];
float price;
SDate pubdate;
struct _SBook *_next;
} SBook;


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

bon voila j'ai mon code. mais il indique une erreur de syntaxe à la ligne 274 et 276 que je ne comprends pas. help??

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>


/*infos livre*/ 
struct elementlivre
{
int code;
char auteur[20];
char titre[20];
};

typedef struct livre
{
        struct elementlivre infolivre;
        struct livre *suivant;
}maillon;
 
typedef maillon* liste;
 
liste ajout(liste l)
{maillon*  nv=(maillon*)malloc(sizeof(maillon));
liste  tmp=NULL;
 printf("Entrez le code du livre:");
  scanf("%d",&nv->infolivre.code);
  printf("Entrez le nom de l'auteur:");
  scanf("%s",&nv->infolivre.auteur);
  printf("Entrez le titre du livre:");
  scanf("%s",&nv->infolivre.titre);
 

 tmp=l;
 if(l==NULL)
          {
      l=nv;
      nv->suivant=NULL;
      return l;
     }
    else 
    {
  while(tmp->suivant!=NULL)
       {
       tmp=tmp->suivant;
       }
       nv->suivant=NULL;
       tmp->suivant=nv;
       }
        return l;
}


/* infos lecteur*/
struct elementlecteur
{
char prenom[20];
char nom[20];
};

typedef struct lecteur
{
        struct elementlecteur infolecteur;
        struct lecteur *suivant2;
}maillon2;
 
typedef maillon2* liste2;
 
liste2 ajout2(liste2 m)
{maillon2*  nv=(maillon2*)malloc(sizeof(maillon2));
liste2  tmp=NULL;


  printf("Entrez le prenom:");
  scanf("%s",&nv->infolecteur.prenom);
  printf("Entrez le nom:");
  scanf("%s",&nv->infolecteur.nom);
 

 tmp=m;
 if(m==NULL)
          {
      m=nv;
      nv->suivant2=NULL;
      return m;
     }
    else 
    {
  while(tmp->suivant2!=NULL)
       {
       tmp=tmp->suivant2;
       }
       nv->suivant2=NULL;
       tmp->suivant2=nv;
       }
        return m;
}

/* supprimer livre*/
maillon* suppression(maillon* l)
{ int x;
  maillon *p,*avp;
      printf("Entrez le code du livre a supprimer:\n");
      scanf("%d",&x);
      if(l==NULL)
      {
      printf("La liste est vide\n");
      return NULL;
      }
  else 
      {
      p=l;
      avp=l;
  while((p->suivant!=NULL)&&(p->infolivre.code!=x))
  {
  avp=p;
  p=p->suivant;
  }
  if(p->suivant==NULL)
  {
  printf("Le livre n'exite pas dans la liste\n");
  return NULL;
  }
  avp->suivant=p->suivant;
  free(p);
  return l;
}
}


/* supprimer lecteur*/

maillon2* suppression2(maillon2* m)
{ 
char nom[20];
  maillon2 *q,*avp;
      printf("Entrez le nom a supprimer:\n");
      scanf("%d",&nom);
      if(m==NULL)
      {
      printf("La liste est vide\n");
      return NULL;
      }
  else 
      {
      q=m;
      avp=m;
  while((q->suivant2!=NULL)&&(q->infolecteur.nom!=nom))
  {
  avp=q;
  q=q->suivant2;
  }
  if(q->suivant2==NULL)
  {
  printf("Le lecteur n'existe pas\n");
  return NULL;
  }
  avp->suivant2=q->suivant2;
  free(q);
  return m;
}
}


/* modifier la bdd livre*/
maillon* modification(maillon* l)
{int  choix1;
 
printf("Ajout       : tapez 1\n");
printf("Suppression : tapez 2\n");
printf("Quitter     : tapez 3\n");
                             
printf("Entrez votre choix:");
scanf("%d",&choix1); 
switch (choix1)
{
case 1:l=ajout(l);
break;
case 2:l=suppression(l);
break;
case 3:exit(0);
default:
break;   

     
}
return l;
}
 
maillon* listerlivre(maillon* l)
{  
      liste temp=l;
      if(l==NULL)
      {
      printf("la liste est vide\n");
      return NULL;
      }
      
while(temp!=NULL)
{
printf("%d",l->infolivre.code);
printf("%s",l->infolivre.auteur[20]);
printf("%s",l->infolivre.titre[20]);
temp=temp->suivant;
}
return l;
}

/* modifier la bdd lecteur*/

maillon2* modification2(maillon2* m)
{int  choix2;
 
printf("Ajout       : tapez 1\n");
printf("Suppression : tapez 2\n");
printf("Quitter     : tapez 3\n");
                             
printf("Entrez votre choix:");
scanf("%d",&choix2); 
switch (choix2)
{
case 1:m=ajout2(m);
break;
case 2:m=suppression2(m);
break;
case 3:exit(0);
default:
break;   

     
}
return m;
}
 
maillon2* listerlecteur(maillon2* m)
{  
      liste2 temp=m;
      if(m==NULL)
      {
      printf("la liste est vide\n");
      return NULL;
      }
      
while(temp!=NULL)
{
printf("%s",m->infolecteur.prenom[20]);
printf("%s",m->infolecteur.nom[20]);

temp=temp->suivant2;
}
return m;
}




/* ecran d'accueil*/
int main(){
liste l=NULL;
liste2 m=NULL;
       int  choix3;
       printf("Modification des livres    : tapez 1\n");
       printf("Modification des lecteurs  : tapez 2\n");
       printf("Liste des livres           : tapez 3\n");
       printf("Liste des lecteurs         : tapez 4\n");
       printf("Quitter                    : tapez 5\n");
       printf("Entrez votre choix");
       scanf("%d",&choix3);
       switch(choix3)
       {
       case 1:l=modification(l);
       break;
       case 2:m=modification2(m);
       break;
       case 3:l=liste(l);
       break;
       case 4:m=liste2(m);
       break;
       case 5:exit(0);   

       default:
       break;        
       }
getch();
return 0;

}
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Que veux-tu faire à ces lignes ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

si je tape "3" à l'écran, ca renvoie la fonction "liste", en gros j'execute le passage pour afficher les listes livres et lecteurs.

et comment faire à la fin pour qu'une fois qu'on a fini de rentrer les infos, on se retrouve à l'écran d'accueil?

merci
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
La fonction liste n'existe pas, d'où l'erreur
Pour revenir au menu à la fin de chaque opération, c'est tout simple :
while (1)
{
  //Affichage du menu
  //[...]
  //Traitement du choix
  //[...]
    case 5: break;
}
N'oublie pas de libérer la mémoire à la fermeture du programme

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

je met où ton morceau de code?

et je met quoi à la place des 3 points?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
int main(){
liste l=NULL;
liste2 m=NULL;
int choix;

while (1)
{
printf("Modification des livres    : tapez 1\n");
printf("Modification des lecteurs  : tapez 2\n");
printf("Liste des livres           : tapez 3\n");
printf("Liste des lecteurs         : tapez 4\n");
printf("Quitter                    : tapez 5\n");
printf("Entrez votre choix");
scanf("%d",&choix);
switch(choix)
{
case 1: l=modification(l); break;
case 2: m=modification2(m); break;
//case 3: l=liste(l); break;
//case 4: m=liste2(m); break;
}
if (choix3==5) break;
}

//ICI LIBERATION MEMOIRE
getch();
return 0;

}


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

hmm ca ne m'affiche carement plus rien....
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Ligne à modifier : if (choix==5) break;
C'est bien joli de dire que ça marche pas mais avec les détails c'est mieux

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
32
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
23 novembre 2010

désolé.
en fait en rajoutant ce while, il ne s'affiche plus rien sur la console quand j'execute.