Probleme d'execution programme en c
jhonbouda
Messages postés
25
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,
slt les amis j'ecris deux programme l 'un charge de creer p factures et l'otre n cheque :
facture code source:
#include<stdlib.h>
#include<stdio.h>
struct facture{
int code;
char nom[20];
int bp;
char ville[20];
int tel;
float montant;
int index_deb;
int index_fin;
};
void creer_facture(int code,char nom[20],int index_deb,int index_fin,int bp,char ville[20],int tel,float montant)
{
printf("entrez le code\n");
scanf("%d",&code);
printf("nom\n");
scanf("%s",&nom);
printf("bp\n");
scanf("%d",&bp);
printf("ville\n");
scanf("%s",&ville);
printf("tel\n");
scanf("%d",&tel);
printf("entrez l index\n");
scanf("%d",&index_deb);
printf("index fin\n");
scanf("%d",&index_fin);
printf("entrer montant\n");
scanf("%f",&montant);
printf("la facture se presente comme suit :\n code:%d\n nom:%s\n bp:%d\n ville:%s\n tel:%d\n index debut:%d\n index fin:%d\n montant:%f\n",code,nom,bp,ville,tel,index_deb,index_fin,montant);
}
int main()
{
int codefact,indexdeb,indexfin,tel,bp;
char nom,ville;
float montantfact;
printf("remplissez la facture\n");
creer_facture(codefact,nom,bp,ville,tel,indexdeb,indexfin,montantfact);
return 0;
}
code source cheque:
#include<stdlib.h>
#include<stdio.h>
struct cheque{
int numcheque;
int numcompte;
float montantpaye;
char nomclient[20];
int codefacture;
};
void creer_cheque(int numcheque,int numcompte,float montantpaye,char nomclient[20],int codefacture)
{
printf("entrez le numero d cheque\n");
scanf("%d",&numcheque);
printf("numero du compte\n");
scanf("%d",&numcompte);
printf("montant paye\n");
scanf("%d",&montantpaye);
printf("nom du client\n");
scanf("%s",&nomclient);
printf("code facture\n");
scanf("%d",&codefacture);
printf("le cheque se presente comme suit :\n numero du cheque:%d\n numero du compte:%d\n montant paye:%f\n nom du client:%s\n code facture:%d\n",numcheque,numcompte,montantpaye,nomclient,codefacture);
}
int main()
{
int numcheque,numcompte,codefacture;
char nomclient;
float montantpaye;
printf("remplissez la facture\n");
creer_cheque(numcheque,numcompte,montantpaye,nomclient,codefacture);
return 0;
}
chaque fois que j 'execute j'ai:
aidez moi svp
slt les amis j'ecris deux programme l 'un charge de creer p factures et l'otre n cheque :
facture code source:
#include<stdlib.h>
#include<stdio.h>
struct facture{
int code;
char nom[20];
int bp;
char ville[20];
int tel;
float montant;
int index_deb;
int index_fin;
};
void creer_facture(int code,char nom[20],int index_deb,int index_fin,int bp,char ville[20],int tel,float montant)
{
printf("entrez le code\n");
scanf("%d",&code);
printf("nom\n");
scanf("%s",&nom);
printf("bp\n");
scanf("%d",&bp);
printf("ville\n");
scanf("%s",&ville);
printf("tel\n");
scanf("%d",&tel);
printf("entrez l index\n");
scanf("%d",&index_deb);
printf("index fin\n");
scanf("%d",&index_fin);
printf("entrer montant\n");
scanf("%f",&montant);
printf("la facture se presente comme suit :\n code:%d\n nom:%s\n bp:%d\n ville:%s\n tel:%d\n index debut:%d\n index fin:%d\n montant:%f\n",code,nom,bp,ville,tel,index_deb,index_fin,montant);
}
int main()
{
int codefact,indexdeb,indexfin,tel,bp;
char nom,ville;
float montantfact;
printf("remplissez la facture\n");
creer_facture(codefact,nom,bp,ville,tel,indexdeb,indexfin,montantfact);
return 0;
}
code source cheque:
#include<stdlib.h>
#include<stdio.h>
struct cheque{
int numcheque;
int numcompte;
float montantpaye;
char nomclient[20];
int codefacture;
};
void creer_cheque(int numcheque,int numcompte,float montantpaye,char nomclient[20],int codefacture)
{
printf("entrez le numero d cheque\n");
scanf("%d",&numcheque);
printf("numero du compte\n");
scanf("%d",&numcompte);
printf("montant paye\n");
scanf("%d",&montantpaye);
printf("nom du client\n");
scanf("%s",&nomclient);
printf("code facture\n");
scanf("%d",&codefacture);
printf("le cheque se presente comme suit :\n numero du cheque:%d\n numero du compte:%d\n montant paye:%f\n nom du client:%s\n code facture:%d\n",numcheque,numcompte,montantpaye,nomclient,codefacture);
}
int main()
{
int numcheque,numcompte,codefacture;
char nomclient;
float montantpaye;
printf("remplissez la facture\n");
creer_cheque(numcheque,numcompte,montantpaye,nomclient,codefacture);
return 0;
}
chaque fois que j 'execute j'ai:

aidez moi svp
A voir également:
- Probleme d'execution programme en c
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
5 réponses
'lut, le problème se trouve ici:
On ne met pas de tableau avec une taille dans les paramètres, on met soit sans taille:
Et comme on a un pointeur, on vire l'esperluette du scanf:
Et du coup, il faut passer un
Attention toutefois, si on tape un nom plus long que 19 caractères, de mauvaises choses peuvent arriver...
Pour le programme de facture, c'est la même chose avec
from human import idiocy
del idiocy
...float montantpaye,char nomclient[20],int codefacture...
On ne met pas de tableau avec une taille dans les paramètres, on met soit sans taille:
char nomclient[], soit en tant que pointeur:
char *nomclient, sachant que les deux reviennent exactement au même.
Et comme on a un pointeur, on vire l'esperluette du scanf:
scanf("%s",nomclient);
Et du coup, il faut passer un
char*à la fonction, qui contient un espace suffisant pour le nom, et on l'alloue dans le main:
char nomclient[20]; ... creer_cheque(numcheque,numcompte,montantpaye,nomclient,codefacture);Et là c'est automagique, ça marche!
Attention toutefois, si on tape un nom plus long que 19 caractères, de mauvaises choses peuvent arriver...
Pour le programme de facture, c'est la même chose avec
nomet
ville.
from human import idiocy
del idiocy
merci beaucoup gravgun de m'avoir aider j'ai corrige le code maintenant pour le montant paye j'ai 0.00000 quel que soit la valeur entree je ne sai pas si jai tout bien fait comme vous avez dit


Sauf que :
- tu ne te sers pas de la struct que tu as créé et qui ne sert à rien
- que l'intérêt d'une telle fonction de "création" comme creer_cheque() serait d'initialiser des données utilisables dans le reste du programme, ce qui n'est pas le cas dans ton implémentation, puisque les données saisies avec les scanf n'auront de durée de vie que limitée à la fonction et n'existeront plus au retour de la fonction
Donc, il faudrait que tu modifies ta fonction pour permettre le passage de pointeurs sur les variables à initialiser.. qui devraient être des variables utilisant l'espace mémoire structuré par la struct que tu définis, tant qu'à faire, pour que ta struct ne soit pas juste décorative.
outres les erreurs déjà signalées, ton scanf pour un float ne devrait pas utiliser le spécificateur %d, mais %f (d'ailleurs, pourquoi un float et pas un double).
de plus, si tu passes des pointeurs sur les données, tu auras déjà des pointeurs pour tes scanf, et tu devras en tenir compte quand tu écriras les scanf (ou tu passes un pointeur sur une structure, ce qui simplifiera ton prototype de fonction).
Dal
- tu ne te sers pas de la struct que tu as créé et qui ne sert à rien
- que l'intérêt d'une telle fonction de "création" comme creer_cheque() serait d'initialiser des données utilisables dans le reste du programme, ce qui n'est pas le cas dans ton implémentation, puisque les données saisies avec les scanf n'auront de durée de vie que limitée à la fonction et n'existeront plus au retour de la fonction
Donc, il faudrait que tu modifies ta fonction pour permettre le passage de pointeurs sur les variables à initialiser.. qui devraient être des variables utilisant l'espace mémoire structuré par la struct que tu définis, tant qu'à faire, pour que ta struct ne soit pas juste décorative.
outres les erreurs déjà signalées, ton scanf pour un float ne devrait pas utiliser le spécificateur %d, mais %f (d'ailleurs, pourquoi un float et pas un double).
de plus, si tu passes des pointeurs sur les données, tu auras déjà des pointeurs pour tes scanf, et tu devras en tenir compte quand tu écriras les scanf (ou tu passes un pointeur sur une structure, ce qui simplifiera ton prototype de fonction).
Dal
Je ne sais pas quel compilateur tu utilises, mais une compilation avec gcc et les warnings (option -Wall) t'alerte sur bon nombre des problèmes signalés par gravgun et moi même, y compris le problème de spécificateur %d au lieu de f% (qui est sans doutes à l'origine du pb que tu mentionnes d'absence de prise en compte de la saisie du montant).
Compile toujours avec les warnings, comprend la raison de chaque warning, et traite les un par un.
Dal
Compile toujours avec les warnings, comprend la raison de chaque warning, et traite les un par un.
Dal
Bonjour,
Merci d'éviter les posts doubles... Il aurait été préférable de continuer dans : https://forums.commentcamarche.net/forum/affich-30395336-projet-de-programmation
Enfin trop tard. Continuons ici maintenant.
Merci d'éviter les posts doubles... Il aurait été préférable de continuer dans : https://forums.commentcamarche.net/forum/affich-30395336-projet-de-programmation
Enfin trop tard. Continuons ici maintenant.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
slt les amis merci de m'avoir accepte sur le forum. j'ai un probleme avec mon code lorsque je l'execute apres un instant j'ai une message d'erreur de windows . egalement on m'a dit que la structure que j'ai definie n'est pas utilise par le programme. vu que je suis debutant je ne sais pas trop quoi faire.
le code:
'''c
#include<stdlib.h>
#include<stdio.h>
typedef struct facture
{
int code;
char nom[20];
int bp;
char ville[20];
int tel;
float montant;
int index_deb;
int index_fin;
}facture;
void creer_facture(int code,char *nom,int index_deb,int index_fin,int bp,char *ville,int tel,float montant)
{
printf("entrez le code:\t");
scanf("%d",&code);
printf("nom:\t");
scanf("%s",nom);
printf("bp:\t");
scanf("%d",&bp);
printf("ville:\t");
scanf("%s",&ville);
printf("tel:\t");
scanf("%d",&tel);
printf("entrez l index:\t");
scanf("%d",&index_deb);
printf("index fin:\t");
scanf("%d",&index_fin);
printf("entrer montant:\t");
scanf("%f",&montant);
printf("la facture se presente comme suit :\n code:%d\n nom:%s\n bp:%d\n ville:%s\n tel:%d\n index debut:%d\n index fin:%d\n montant:%f\n",code,nom,bp,ville,tel,index_deb,index_fin,montant);
}
int main()
{
int codefact,indexdeb,indexfin,tel,bp;
char nom[20];
char ville[20];
float montantfact;
printf("remplissez la facture\n");
creer_facture(codefact,nom,bp,ville,tel,indexdeb,indexfin,montantfact);
return 0;
}
'''
le code:
'''c
#include<stdlib.h>
#include<stdio.h>
typedef struct facture
{
int code;
char nom[20];
int bp;
char ville[20];
int tel;
float montant;
int index_deb;
int index_fin;
}facture;
void creer_facture(int code,char *nom,int index_deb,int index_fin,int bp,char *ville,int tel,float montant)
{
printf("entrez le code:\t");
scanf("%d",&code);
printf("nom:\t");
scanf("%s",nom);
printf("bp:\t");
scanf("%d",&bp);
printf("ville:\t");
scanf("%s",&ville);
printf("tel:\t");
scanf("%d",&tel);
printf("entrez l index:\t");
scanf("%d",&index_deb);
printf("index fin:\t");
scanf("%d",&index_fin);
printf("entrer montant:\t");
scanf("%f",&montant);
printf("la facture se presente comme suit :\n code:%d\n nom:%s\n bp:%d\n ville:%s\n tel:%d\n index debut:%d\n index fin:%d\n montant:%f\n",code,nom,bp,ville,tel,index_deb,index_fin,montant);
}
int main()
{
int codefact,indexdeb,indexfin,tel,bp;
char nom[20];
char ville[20];
float montantfact;
printf("remplissez la facture\n");
creer_facture(codefact,nom,bp,ville,tel,indexdeb,indexfin,montantfact);
return 0;
}
'''
Pour bien indenter le code, il faut mettre entre deux balises codes comme suite :
<"code c>ici tu mets ton code<"/code"> (sans les guillemets).
Dans ton code, tu définies une belle structure, mais tu ne t'en sers pas du tout. Du coup, elle ne sert à rien.
Dans ton main, plutôt que déclarer nom, ville et compagnie, tu as juste à faire struct facture f; D'ailleurs pour info, c'est mieux de mettre une majuscule au nom de la structure : struct Facture; (ce n'est que convention).
Ensuite, il faut faire une boucle for pour pouvoir créer plusieurs factures. Et il manque la structure Cheque.
<"code c>ici tu mets ton code<"/code"> (sans les guillemets).
Dans ton code, tu définies une belle structure, mais tu ne t'en sers pas du tout. Du coup, elle ne sert à rien.
Dans ton main, plutôt que déclarer nom, ville et compagnie, tu as juste à faire struct facture f; D'ailleurs pour info, c'est mieux de mettre une majuscule au nom de la structure : struct Facture; (ce n'est que convention).
Ensuite, il faut faire une boucle for pour pouvoir créer plusieurs factures. Et il manque la structure Cheque.
C'est parfaitement admis. C'est juste que la valeur est ignorée puisque le compilateur convertit en pointeur. Donc, l'erreur ne se situe pas là.