begin process at 2012 02 10 15:55:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

preobleme de fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

preobleme de fonction

jeudi 19 août 2004 à 17:15:56 | preobleme de fonction

gemini010

bonjour ,g commencer a faire un programme me permetant d'enregistrer des client dans un fichier a l'inde d'une fonction et de les consulte en utilisant une autre fonction, cela semblait fonctionner jusqu'au momment ou g creer une fonction execmenu affin de rendre le programme + intuitif

le probleme est que depuis que j'utilise la fonction execmenu, je n'arrive plus a consulter les enregistrement se trouvant dans le fichier

pourriez vous me dire ce qui ne vas pas dans mon code? merci

Gemini

// le code

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

/* definition des structure ------------------------------------*/

struct cli
{
int id_cli;
char nom[25];
float som_due;
int reduc;
int tva;
};

struct fact
{
int id_fact;
char nom_cli[25];
float mont_tot;
};

/* déclaration des fonctions --------------------------------*/

int execmenu();
void encodecli(struct cli *t);
void encodefact(struct fact *t_fact);
void affiche (struct cli t);

/* Fonction principale -----------------------------------------*/
void main()
{

/*Déclarations ----------------------------------------------*/
struct cli tab[10];
struct fact tab_fact[10];
int choi;

/* Traitement -----------------------------------------------*/


do
{
choi=execmenu();

switch (choi)
{
case 1: encodecli(tab);
break;
case 2: encodefact(tab_fact);
break;
case 3: affiche (*tab);
break;
case 4: printf("choix 4");
break;
case 5: printf("choix 5");
break;
case 99: printf("choix 99");
break;
}

}
while (choi!=99);
}
/* fonction execmenu ----------------------------------------*/

int execmenu()

{
int choix;
clrscr();

printf("\n\n\n\n\n\n\n\n");
printf(" ******************************************\n");
printf(" * <1> Ajouter un client *\n");
printf(" * <2> Ajouter une facture *\n");
printf(" * <3> Consulter la liste des clients *\n");
printf(" * <4> Consulter la liste des factures *\n");
printf(" * <5> Lister les mauvais payeur *\n");
printf(" * <99> quitter *\n");
printf(" * Votre choix : *\n");
printf(" ******************************************\n");

do
{
scanf("%d",&choix);
}
while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99);

return choix;
}

/*fonction d'encodage des client ----------------------------*/
void encodecli(struct cli *t)
{
FILE *ptr;
int ok;
char choix;
ptr=fopen("acces.dat","a+b");
if(ptr!=NULL)
{
choix='o';
while(choix == 'o')
{
clrscr();
printf("\nentrer le nom :");
scanf("%s",t->nom);
printf("entrer le taux de la tva, 25 ou 12:");
scanf("%d",&t->tva);
t->id_cli+1;
fflush(stdin);
fwrite(t,sizeof(*(t)),1,ptr);
do
{
ok=0;
printf("Nouvelle fiche (o/n) ?");
choix = getchar();
choix=tolower(choix);
if(choix!='o' && choix!='n')
{
printf("\nRépondez \"o\" ou \"n\" \n");
ok=1;
}
}while(ok == 1);
}// fin while ok
}// fin if ptr NULL

fclose(ptr);
}
/*fonction d'encodage des client ----------------------------*/

void encodefact(struct fact *t_fact)
{

int rep_fact;
int art=0;
int prix=0;
int quant=0;
int total=0;
int temp=0;
int somme=0;

do
{
clrscr();
printf("entrer le numero de l'article:");
scanf("%d", &art);
printf("entrer le prix de l'article:");
scanf("%d", &prix);
printf("entrer le nombre d'aricle:");
scanf("%d", &quant);

somme = prix*quant;
total += somme;


printf("voulez vous continuer? 1 pour oui, 2 pour non");
scanf("%d",&rep_fact);

}
while(rep_fact==1);

if (total > 1200)
temp = total-(total/100*3);

else
if(total > 500)
temp = total - total/100;


printf("le montant de la facture est de %d",temp);
}

//Affichage du contenu du fichier principal
void affiche(struct cli t)
{
FILE *ptr;
ptr=fopen("acces.dat","r");
fread(&t,sizeof(t),1,ptr);
while(fread(&t,sizeof(struct cli),1,ptr) != 0)//(!feof(ptr))
{
printf("\nNom : %s, tva : %d",t.nom,t.tva);
}
fclose(ptr);
}
jeudi 19 août 2004 à 20:16:45 | Re : preobleme de fonction

dletozeun

Il y a un truc que je comprends pas dans ta fonction execmenu() pourquoi tu mets des points virgule apres la parenthese finale de tes while ? Si tu les enleves ca fait koi?

Mais bon vu que je n'utilise pas "do" je dis surement des conneries...

moi j'aurais fait:

while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99)
{
scanf("%d",&choix);
}

Ce genre de presentation a la place des do while

Peut etre que le probleme vient du fait que t'as pas mis de "s" à "/*fonction d'encodage des client ----------------------------*/
"

Mais plus serieusement, il y aun truc bizarre ici:

while(choix == 'o')
{
clrscr();
...

"choix" est du type char alors tu ne peux pas comparer choix et 'o' comme ca parce que choix est un pointeur vers une adresse memoire...
Il faut que tu fasses while(!strcmp(choix,"o"))
strcmp() renvoie 0 quand les deux arguments sont egaux mais c'est a verifier...) de meme pour :if(choix!='o' && choix!='n')


jeudi 19 août 2004 à 21:04:36 | Re : preobleme de fonction

DeAtHCrAsH

Ya juste un truc vraiment chelou:

Affiche(*Tab);

T'es sure de toi sur ce coup la ?!
Corrige toi et ca devrait bcp mieux marcher!

Shell
jeudi 19 août 2004 à 21:49:21 | Re : preobleme de fonction

djl

affiche (*tab); est correcte, mais le code est incoherent, a qoi ca sert de servir d'une copie de *tab comme variable locale?

ne jamais faire
while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99)
{
scanf("%d",&choix);
}

risque de boucle infinie, si la saisie est invalide scanf butera indefiniment dessus

il faut faire

while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99)
{
if( !scanf("%d",&choix) ) while( fgetc(stdin) != EOF );
}

pir encore, jamais de scanf sur un char*, pas de controle de bord, toujours utiliser fgets
vendredi 20 août 2004 à 14:36:16 | Re : preobleme de fonction

gemini010

voila g reussi a resoudre mon probleme avec execmenu mais c vrai que comme disait Djl lorsque je rentre autre chose que un nombre pour rentrer dans

while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99)
{
scanf("%d",&choix);
}

et bien ca plante, g essayer comme tu as dit mais alors le menu ne fonctionne de nouveau plus

ceci dit g un autre probleme, lorsque j'encode les facture, je dois entrer le nom du client mais le client doit d'abord exister, j'aimerai savoir comment faire pour pouvoir aller verifier dans mon fichier client si celui ci existe deja

je remet mon code modifier, merci pour votre aide

Stéphane

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define TAILLE 100

/* definition des structure ------------------------------------*/

struct cli
{
int id_cli;
char nom[25];
float som_due;
int reduc;
int tva;
};

struct fact
{
int id_fact;
char nom_cli[25];
float mont_tot;
};

/* déclaration des fonctions --------------------------------*/

int execmenu();
void encodecli(struct cli *t);
void encodefact(struct fact *t_fact);
void affiche (struct cli t);

/* Fonction principale -----------------------------------------*/
void main()
{

/*Déclarations ----------------------------------------------*/
struct cli tab[TAILLE];
struct fact tab_fact[TAILLE];
int choi;

/* Traitement -----------------------------------------------*/


do
{
choi=execmenu();

switch (choi)
{
case 1: encodecli(tab);
break;
case 2: encodefact(tab_fact);
break;
case 3: affiche (*tab);
break;
case 4: printf("choix 4");
break;
case 5: printf("choix 5");
break;
case 99: printf("Aurevoir");
break;
}

}
while (choi!=99);
}
/* fonction execmenu ----------------------------------------*/

int execmenu()

{
int choix;
clrscr();

printf("\n\n\n\n\n\n\n\n");
printf(" ******************************************\n");
printf(" * <1> Ajouter un client *\n");
printf(" * <2> Ajouter une facture *\n");
printf(" * <3> Consulter la liste des clients *\n");
printf(" * <4> Consulter la liste des factures *\n");
printf(" * <5> Lister les mauvais payeur *\n");
printf(" * <99> quitter *\n");
printf(" * Votre choix : *\n");
printf(" ******************************************\n");

do
{
scanf("%d",&choix);
}
while (choix!=1 && choix!=2 && choix!=3 && choix!=4 && choix!=5 && choix!=99);

return choix;
}

/*fonction d'encodage des client ----------------------------*/
void encodecli(struct cli *t)
{
FILE *ptr;
int ok;
char choix;
ptr=fopen("acces.dat","a+b");
t->id_cli = 1;
if(ptr!=NULL)
{
choix='o';
while(choix == 'o')
{
clrscr();
printf("Client n°%d",t->id_cli);
printf("\nentrer le nom :");
scanf("%s",t->nom);
printf("entrer le taux de la tva, 25 ou 12:");
scanf("%d",&t->tva);
t->id_cli++;
fflush(stdin);
fwrite(t,sizeof(*(t)),1,ptr);
do
{
ok=0;
printf("Nouvelle fiche (o/n) ?");
choix = getchar();
choix=tolower(choix);
if(choix!='o' && choix!='n')
{
printf("\nRépondez \"o\" ou \"n\" \n");
ok=1;
}
}
while(ok == 1);
}// fin while ok
}// fin if ptr NULL

fclose(ptr);
}
/*fonction d'encodage des Facture ----------------------------*/

void encodefact(struct fact *t_fact)
{

int rep_fact;
int art=0;
int prix=0;
int quant=0;
int total=0;
int temp=0;
int somme=0;

do
{
clrscr();
printf("entrer le numero de l'article:");
scanf("%d", &art);
printf("entrer le prix de l'article:");
scanf("%d", &prix);
printf("entrer le nombre d'aricle:");
scanf("%d", &quant);

somme = prix*quant;
total += somme;


printf("voulez vous continuer? 1 pour oui, 2 pour non");
scanf("%d",&rep_fact);

}
while(rep_fact==1);

if (total > 1200)
temp = total-(total/100*3);

else
if(total > 500)
temp = total - total/100;
else
temp = total;



printf("le montant de la facture est de %d",temp);
getch();
}
//Affichage du contenu du fichier principal
void affiche(struct cli t)
{
FILE *ptr;
ptr=fopen("acces.dat","r");
fread(&t,sizeof(t),0,ptr);
clrscr();
while(fread(&t,sizeof(struct cli),1,ptr) != 0)//(!feof(ptr))
{
printf("\n Numéro Client : %d, Nom : %s, tva : %d",t.id_cli-1,t.nom,t.tva);
//cli-1 car incrémentation par avance à l'encode
}
printf("\n\n Appuyer sur une touche pour revenir au menu");
getch();
fclose(ptr);
}


Cette discussion est classée dans : int, printf, choix, ptr, fact


Répondre à ce message

Sujets en rapport avec ce message

prob pour associe des donnée se trouvant dans 2 fichiers different [ par gemini010 ] bonjour,g creer 5 fonctions permetant : - de lancer le menu du prog d'ajouter des client 0 + 1 = 6 ??? [ par Also know as ] Bonjour, J'ai à nouveau le même genre de poblème. Voici mon nouveau source : /* Exemple simple d'utilisation de l'instruction do-while */ #include sortie de programme impossible [ par maniolar ] Bonjour à tous, celafait deux jours que je tente deseperemment de trouver un moyen de sortir de mon prog correctement mais je n'y arrive pas!! j'ai l' affichache d'un document en c [ par godar8 ] j'ai fait un programe  d'editeur de texte en  c  pour cretion document , ajout , supprimer etcmais j'ai un petit  mon document ne s'affiche  pas pour [C] Retour au début du programme [ par thekid06 ] Bonsoir, Je cherche après chaque execution revenir au début du programme. Comment je peut faire s'il vous plaît ? Voilà ma source : [code=cpp]#includ Aide pour mastermind [ par Giuventine ] Bonjour à tous, Je débute en programmation et dans le cadre du cours je dois réaliser un projet qui est le Mastermind en C. Pour cela, j'ai conçu u Dictionnaire de traduction [ par JSG19 ] Salut j'ai un dictionnaire a programmer a chaque fois que je programme soit j'ai le premier mot soit le dernier ou toute la liste de traduction donc position POINT et tableau 2 dimension [ par sokotanic ] bonjour à t.l.m. je souhaite recuperer la position x et y de la souris et la mettre dans un tableau 2 dimensions et afficher cette position dans un p Programme en c++ [ par noussa44 ] Bonjour tout le monde, j'ai besoin svp de vore aide sur un programme que j'ai fait qui permet de trier des réels dans un tableau.Mais j'ai un problèm gestion d'une bibliothèque [ par samanta26 ] slt, j'ai besoin d'aide SVP!![^^sad2] j'ai un mini projet de gestion d'une bibliothèque!! je dois implémenter un ensemble de fonctions :saise, tri, re


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales