Problème d'affichage programme
baedyl
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Je travaille sur mon projet de fin d'année (gestion d'une bibliothèque), j'exécute mon programme sans souci mais au moment de l'affichage il plante, un message d'erreur s'affiche et mon programme s'arrete. J'utilise Codeblocks 13.12 sous windows 8.1.
SVP voici mon code j'ai vraiment besoin d'aide!!!
Je travaille sur mon projet de fin d'année (gestion d'une bibliothèque), j'exécute mon programme sans souci mais au moment de l'affichage il plante, un message d'erreur s'affiche et mon programme s'arrete. J'utilise Codeblocks 13.12 sous windows 8.1.
SVP voici mon code j'ai vraiment besoin d'aide!!!
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <windows.h> typedef struct{ int Jour,Mois,Annee; }Date; typedef struct{ int ISBN,Nombre_Exemplaire; char Titre[100],Auteur[100],Editeur[100],Type[100]; Date Date_Edition; float Prix; }Document; void Remplissage(Document T[],int ); void Affichage(Document [],int); void Menu(Document [],int); int Recherche(Document [],int ,int ); void Tri(); void Ajout(); void Suppression(); void Modification(); void Emprunter(); void Rendre_doc(); int main(){ system("color 3"); int choix=0,N; Document T[100]; Menu(T,choix); return 0; } void Menu(Document T[100],int choix){ int N,ISBN; do{ do{ system("cls"); printf("(1)Remplissage \t(2)Affichage\t(3)Recherche\t(4)Tri\n\n(5)Ajout\t(6)Suppression\t(7)Modification\t(8)Emprunter\n\n\t\t\t\t\t\t\t\t(0)Quitter"); printf("\nOperation a effectuer: "); scanf("%d",&choix); }while(choix<0||choix>9); switch(choix){ case 1: system ("cls"); Remplissage(T,N); break; case 2: system ("cls"); Affichage(T,N); break; case 3: system ("cls"); Recherche(T,N,ISBN); break; case 4: system ("cls"); Tri(T,N); break; case 0: break; } }while(choix!=0); return; } void Remplissage(Document T[100],int N){ int i; do{ printf("\nEntrer le nombre de documents: "); scanf("%d",&N); }while(N<=0||N>100); for(i=0;i<N;i++){ printf("\nEntrer les informations sur le document %d: ",i+1); printf("\n\n ISBN: "); do{ scanf("%d",&T[i].ISBN); }while(T[i].ISBN==T[i-1].ISBN); fflush(stdin); printf(" \n\nTitre: "); gets(T[i].Titre); printf(" \n\nAuteur: "); gets(T[i].Auteur); printf(" \n\nEditeur: "); gets(T[i].Editeur); do{ printf("\n\nDate selon le format JJ MM AAAA: "); scanf("%d %d %d", &T[i].Date_Edition.Jour, &T[i].Date_Edition.Mois, &T[i].Date_Edition.Annee); if(T[i].Date_Edition.Jour==29&&T[i].Date_Edition.Annee%4!=0) printf("\t\t\t\t\t\t\a Date non valide"); }while((T[i].Date_Edition.Jour<=0)||(T[i].Date_Edition.Jour>31)||(T[i].Date_Edition.Mois<=0)||(T[i].Date_Edition.Mois>12)||(T[i].Date_Edition.Annee<0)||(T[i].Date_Edition.Annee>2015)||(T[i].Date_Edition.Jour==29 && T[i].Date_Edition.Annee%4!=0)); fflush(stdin); printf(" \n\nType: "); gets(T[i].Type); printf(" \n\nNombre d'exemplaires: "); do{ scanf("%d",&T[i].Nombre_Exemplaire); }while(T[i].Nombre_Exemplaire<0); do{ printf(" \n\nprix: "); scanf("%f",&T[i].Prix); }while(T[i].Prix<=0); } return; } void Affichage(Document T[100], int N){ int i; for(i=0;i<N;i++){ printf("Infos Document %d : \n",i+1); printf("ISBN:%d", T[i].ISBN); printf("Titre: %s",T[i].Titre); printf("\n\tAuteur : %s ",T[i].Auteur); printf("\n\tEditeur : %s ",T[i].Editeur); printf("\n\tdate d'edition : %d/%d/%d ",T[i].Date_Edition.Jour,T[i].Date_Edition.Mois,T[i].Date_Edition.Annee); printf("\n\tType : %s",T[i].Type); printf("\n\tNombre d'exemplaires : %d ",T[i].Nombre_Exemplaire); printf("\n\tPrix : %2f dh ",T[i].Prix); } return; } int Recherche(Document T[100],int N,int ISBN){ int i; do{ printf("Entrer l'ISBN du document a rechercher: "); scanf("%d",&ISBN); }while(ISBN<0||ISBN>100); for(i=0;i<=N;i++){ if(T[i].ISBN==ISBN) return i; return -1; }getch(); } void Tri(Document T[100],int N,int choix2){ printf("(1) Tri par ordre alphabetique des titres\n(2)Tri par ordre croissant des prix\n(3)Tri par ordre chronologique des dates d'edition "); printf("\nTri a effectuer: "); scanf("%d",&choix2); switch(choix2){ case 1: break; case 2: break; default: break;} }
A voir également:
- Problème d'affichage programme
- Programme demarrage windows - Guide
- Affichage double ecran - Guide
- Problème affichage fenêtre windows 10 - Guide
- Windows 11 affichage classique - Guide
- Message programmé iphone - Guide
1 réponse
Bonjour,
int choix=0,N;
Menu(T,choix);
Ca ne modifiera pas la variable choix présent dans le main(). Pour ce faire, il faut passer par un pointeur. Et si tu n'as pas besoin de modifier choix, alors ça sert à rien de l'envoyer en paramètre. Il suffit de le déclarer dans la fonction Menu().
De plus à quoi sert ta fonction N dans le main() ?
void Menu(Document T[100],int choix){
int N,ISBN;
Exactement même remarque pour N que tu utilises pour appeler les fonctions Remplissage(), Affichage(), Recherche() et Tri().
while(T[i].ISBN==T[i-1].ISBN);
Attention, lorsque i=0 (1ère itération), tu auras T[-1] => plantage.
fflush(stdin);
Ce n'est pas correct. Pour vider le buffet, il faut le faire manuellement avec une boucle while() sur un getchar().
gets(T[i].Titre);
Fonction obsolète. On utilise plutôt la fonction fgets().
Même remarque pour les autres gets().
Pas besoin de return; à la fin de tes fonctions void.
Corrige déjà tout ça, et reposte ton code corrigé. N'hésite pas non plus à nous dire précisément où ça plante précisément.
Cdlt,
int choix=0,N;
Menu(T,choix);
Ca ne modifiera pas la variable choix présent dans le main(). Pour ce faire, il faut passer par un pointeur. Et si tu n'as pas besoin de modifier choix, alors ça sert à rien de l'envoyer en paramètre. Il suffit de le déclarer dans la fonction Menu().
De plus à quoi sert ta fonction N dans le main() ?
void Menu(Document T[100],int choix){
int N,ISBN;
Exactement même remarque pour N que tu utilises pour appeler les fonctions Remplissage(), Affichage(), Recherche() et Tri().
while(T[i].ISBN==T[i-1].ISBN);
Attention, lorsque i=0 (1ère itération), tu auras T[-1] => plantage.
fflush(stdin);
Ce n'est pas correct. Pour vider le buffet, il faut le faire manuellement avec une boucle while() sur un getchar().
gets(T[i].Titre);
Fonction obsolète. On utilise plutôt la fonction fgets().
Même remarque pour les autres gets().
Pas besoin de return; à la fin de tes fonctions void.
Corrige déjà tout ça, et reposte ton code corrigé. N'hésite pas non plus à nous dire précisément où ça plante précisément.
Cdlt,
J'ai suivi tes remarques...Mais il y a toujours des petits problèmes, quand j'utilise "fgets" on me dit "too few arguments to function fgets". Aussi j'ai pas encore vu les pointeurs donc je suis un peu perdu et aussi l'alternative que tu m'as proposé pour fflush reste encore un peu flou dans ma tete.
Sinon au moment du lancement de la fonction affichage mon programme plante toujours...
Pour fgets(), il faut regarder le manuel (man fgets) : cela donne par exemple :
Pour fflush(stdin), cela n'existe pas en C...
La bonne méthode :
A mettre dans une fonction bien sûr.
Après, il restera probablement d'autres erreurs. C'est pour ça que j'insiste sur le fait que tu corriges l'ensemble, que tu repostes le code corrigé et que tu nous dises précisément où ça plante.