Aide sur projet c
alfons14
Messages postés
3
Statut
Membre
-
alfons14 Messages postés 3 Statut Membre -
alfons14 Messages postés 3 Statut Membre -
Bonjour a tous les membres de ccm , le projet c'est gestion de bibliothéque j'ai un probleme de l'affichage de la liste d'ouvrage fonction affiche . (Dev c++)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct {
char titre[100];
int annee;
char auteur[100];
char domaine[100];
}ouvrage;
void menu()
{
printf(" MENU PRINCIPAL\n ");
printf("1-Gestion des Ouvrages \n ");
printf("2-Gestion des Adhérents\n");
printf("3-Gestion des Locations \n");
printf("4-Quitter\n");
}
void menugdo()
{
system(("cls"));
printf("1-Ajout d'un Ouvrage \n");
printf("2-Modification \n");
printf("3-Suppression \n");
printf("4-Recherche \n");
printf("5-Liste des ouvrages \n");
printf("6-Menu Principal\n");
choixgdo();
}
void menuaddouvrage()
{
system(("cls"));
printf("1-Titre \n");
printf("2-Anné d'edition \n");
printf("3-Auteur \n");
printf("4-Domaine \n");
printf("5-Retour \n");
choixaddouvrage();
}
void affiche(ouvrage a[],int x)
{
int i;
for(i=0;i<2;i++)
{
printf("\n titre:");
printf("%s",a[i].titre);
//printf("\n");
//printf("annee:");
// printf("%d",a[i].annee);
}
}
void saisiouvrage(ouvrage a[],int x)
{
int i;
for(i=0;i<2;i++)
{
fflush(stdin);
printf("Titre:");
gets(a[i].titre);
printf("annee:");
scanf("%d",&a[i].annee);
fflush(stdin);
}
// printf("Titre:\t");/*gets(a[*x].titre);*/scanf("%d",&a[*x].annee);
//fflush(stdin);
// printf("Annee edition:\t");scanf("%d",&a[i].annee);
// printf("Auteur:\t");gets(a[i].auteur);//scanf("%s",&a[x].auteur);
// printf("Domaine:\t");gets(a[i].domaine);//scanf("%s",&a[x].domaine);
//}
}
int choixaddouvrage()
{
ouvrage a[3];
int c,x;
while(c!=5)
{
printf(" choix:");
scanf("%d",&c);
switch(c)
{
case 1 :saisiouvrage(a,x);
break;
case 5 :system(("cls"));menugdo();break;
}
}
return c;
}
int choixgdo()
{
ouvrage a[3];
int c,x;
while(c!=6)
{
printf(" choix:");
scanf("%d",&c);
switch(c)
{
case 1 :menuaddouvrage();break;
case 5:affiche(a,x);break;
break;
}
}
return c;
}
int choix()
{
ouvrage a[3];
int c,x;
printf(" choix:");
scanf("%d",&c);
switch(c)
{
case 1 :menugdo();break;
case 5:affiche(a,x);break;
}
return c;
}
int main()
{
menu();
choix();
getch();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct {
char titre[100];
int annee;
char auteur[100];
char domaine[100];
}ouvrage;
void menu()
{
printf(" MENU PRINCIPAL\n ");
printf("1-Gestion des Ouvrages \n ");
printf("2-Gestion des Adhérents\n");
printf("3-Gestion des Locations \n");
printf("4-Quitter\n");
}
void menugdo()
{
system(("cls"));
printf("1-Ajout d'un Ouvrage \n");
printf("2-Modification \n");
printf("3-Suppression \n");
printf("4-Recherche \n");
printf("5-Liste des ouvrages \n");
printf("6-Menu Principal\n");
choixgdo();
}
void menuaddouvrage()
{
system(("cls"));
printf("1-Titre \n");
printf("2-Anné d'edition \n");
printf("3-Auteur \n");
printf("4-Domaine \n");
printf("5-Retour \n");
choixaddouvrage();
}
void affiche(ouvrage a[],int x)
{
int i;
for(i=0;i<2;i++)
{
printf("\n titre:");
printf("%s",a[i].titre);
//printf("\n");
//printf("annee:");
// printf("%d",a[i].annee);
}
}
void saisiouvrage(ouvrage a[],int x)
{
int i;
for(i=0;i<2;i++)
{
fflush(stdin);
printf("Titre:");
gets(a[i].titre);
printf("annee:");
scanf("%d",&a[i].annee);
fflush(stdin);
}
// printf("Titre:\t");/*gets(a[*x].titre);*/scanf("%d",&a[*x].annee);
//fflush(stdin);
// printf("Annee edition:\t");scanf("%d",&a[i].annee);
// printf("Auteur:\t");gets(a[i].auteur);//scanf("%s",&a[x].auteur);
// printf("Domaine:\t");gets(a[i].domaine);//scanf("%s",&a[x].domaine);
//}
}
int choixaddouvrage()
{
ouvrage a[3];
int c,x;
while(c!=5)
{
printf(" choix:");
scanf("%d",&c);
switch(c)
{
case 1 :saisiouvrage(a,x);
break;
case 5 :system(("cls"));menugdo();break;
}
}
return c;
}
int choixgdo()
{
ouvrage a[3];
int c,x;
while(c!=6)
{
printf(" choix:");
scanf("%d",&c);
switch(c)
{
case 1 :menuaddouvrage();break;
case 5:affiche(a,x);break;
break;
}
}
return c;
}
int choix()
{
ouvrage a[3];
int c,x;
printf(" choix:");
scanf("%d",&c);
switch(c)
{
case 1 :menugdo();break;
case 5:affiche(a,x);break;
}
return c;
}
int main()
{
menu();
choix();
getch();
return 0;
}
3 réponses
-
'lut, et où est la question? Sache qu'ici, on ne fait pas les exos à la place des autres, mais on aide quand quelqu'un coince sur un point où il a déjà cherché (et n'a pas réussi).
Quelques commentaires:#include <conio.h>
: Non standard, a supprimersystem(("cls"));: Idem, pas portablefflush(stdin);
: Idem, comportement non défini, a remplacer par un appel vers une fonction comme ça:void flush_stdin() { int c; while ((c = getchar()) != '\n' && c != EOF); }
L'indentation a été supprimée mais j'espère qu'elle existe dans ton code, la prochaine fois sers toi de ce bouton une fois que tu as copié ton code et séléctionné:
-
J'ai compris, mais le probleme est dans l'affichage de la liste des ouvrages, quand j'affiche il me donne des valeurs aléatoires.
-
C'est normal:
ouvrage a[3];
définit la place pour 3ouvrage
s mais la mémoire peut contenir des octets au hasard, d'où les valeurs aléatoires. Il faut nettoyer cet espace avecmemset(a, 0, sizeof(ouvrage)*3);
Autre remarques: remplace legetch()
pargetchar()
.gets(a[i].titre)
est dangereux, remplace le parscanf("%99s", a[i].titre)(99 car titre peut contenir 100 caractères, il faut l'espace pour le'\0'
final), idem pour le reste du code que tu as commenté.
Ta liste d'ouvrage n'est pas conservée entre les fonctions: tu redéfinisouvrage a[3];
à chaque fois. Fais comme avec ta fonctionaffiche
: utilise un paramètre qui contient le tableau des oeuvres pour le passer entre les fonctions. -
-
-
-
Merci infiniment , je veux pas etre fatiguant mais j'ai un autre problème , après plusieurs modification dans mon programme je sais pas comment incrémenter la taille du tableau pour que l'affichage soit exacte d'autant de fois l'utilisateur ajoute un autre ouvrage pendant l'execution du programme.j'ai penser a un pointeur *p qui s'incrementera aprés chaque saisie d'infos .puis laffichage final sera de i=0 à *p.
#include <stdio.h> #include <stdlib.h> #include <myconio.h> typedef struct { char titre[100]; int annee; char auteur[100]; char domaine[100]; }ouvrage; void menu() { gotoxy(31,11); printf(" MENU PRINCIPAL\n \t\t 1-Gestion des Ouvrages\n \t\t 2-Gestion des Adhérents\n \t\t 3-Gestion des Locations\n \t\t 4-Quitter\n "); // printf("1-Gestion des Ouvrages \n "); // printf("2-Gestion des Adhérents\n"); // printf("3-Gestion des Locations \n"); // printf("4-Quitter\n"); } void menugdo(ouvrage a[],int x,int *p) { system(("cls")); printf("1-Ajout d'un Ouvrage \n"); printf("2-Modification \n"); printf("3-Suppression \n"); printf("4-Recherche \n"); printf("5-Liste des ouvrages \n"); printf("6-Menu Principal\n"); choixgdo(a,x,p); } void menuaddouvrage(ouvrage a[],int x,int *p) { system(("cls")); printf("1-Titre \n"); printf("2-Anné d'edition \n"); printf("3-Auteur \n"); printf("4-Domaine \n"); printf("5-Retour \n"); choixaddouvrage(a,x,p); } void affiche(ouvrage a[],int x,int *p) { int i; for(i=0;i<*p;i++) { printf("\n titre:"); printf("%s",a[i].titre); printf("\n"); printf("annee:"); printf("%d",a[i].annee); } } void saisiouvrage(ouvrage a[],int x, int *p) { int i; for(i=0;i<x;i++) { fflush(stdin); printf("Titre:"); gets(a[i].titre); printf("annee:"); scanf("%d",&a[i].annee); fflush(stdin); (*p)++; } // printf("Titre:\t");/*gets(a[*x].titre);*/scanf("%d",&a[*x].annee); //fflush(stdin); // printf("Annee edition:\t");scanf("%d",&a[i].annee); // printf("Auteur:\t");gets(a[i].auteur);//scanf("%s",&a[x].auteur); // printf("Domaine:\t");gets(a[i].domaine);//scanf("%s",&a[x].domaine); //} } int choixaddouvrage(ouvrage a[],int x,int *p) { int c; while(c!=5) { printf(" choix:"); scanf("%d",&c); switch(c) { case 1 :saisiouvrage(a,x,p); break; case 5 :system(("cls"));menugdo(a,x,p);break; } } return c; } int choixgdo(ouvrage a[],int x,int *p) { int c; while(c!=6) { printf(" choix:"); scanf("%d",&c); switch(c) { case 1 :menuaddouvrage(a,x,p);break; case 5:affiche(a,x,p);break; case 6:system(("cls"));menu();choix(a,x,p);break; } } return c; } int choix(ouvrage a[],int x,int *p) { int c; printf(" \t\t\t\t\t choix:"); scanf("%d",&c); switch(c) { case 1 :menugdo(a,x,p);break; case 5:affiche(a,x,p);break; } return c; } int main() { ouvrage a[100]; int x=1,*p; memset(a, 0, sizeof(ouvrage)*100); menu(); choix(a,x,p); getch(); return 0; }