Correction code C

nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010 - 24 oct. 2010 à 01:27
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 23 nov. 2010 à 21:42
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

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 oct. 2010 à 10:51
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
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 oct. 2010 à 10:51
dois*

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 oct. 2010 à 10:57
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
24 oct. 2010 à 11:26
merci pour la rep

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

tu pourrais m'aider à refaire le code?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 oct. 2010 à 11:34
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
24 oct. 2010 à 23:17
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
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
25 oct. 2010 à 20:46
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
25 oct. 2010 à 21:03
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?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
26 oct. 2010 à 18:38
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
26 oct. 2010 à 19:13
tu peux me donner un exemple pour que je fasse pareil pour les autres stp
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
26 oct. 2010 à 22:08
//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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
27 oct. 2010 à 18:29
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;

}
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
27 oct. 2010 à 22:59
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
28 oct. 2010 à 13:49
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
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 oct. 2010 à 22:16
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
28 oct. 2010 à 22:46
je met où ton morceau de code?

et je met quoi à la place des 3 points?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 oct. 2010 à 23:15
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
28 oct. 2010 à 23:30
hmm ca ne m'affiche carement plus rien....
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
30 oct. 2010 à 09:25
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
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
30 oct. 2010 à 13:16
désolé.
en fait en rajoutant ce while, il ne s'affiche plus rien sur la console quand j'execute.
0
Rejoignez-nous