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   -
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


5 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, le problème se trouve ici:
...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
nom
et
ville
.
from human import idiocy
del idiocy
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
On ne met pas de tableau avec une taille dans les paramètres, on met soit sans taille
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à.
0
jhonbouda Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   1
 
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
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
sans compter ses scanf qui sont pas géré
0
jhonbouda Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   1
 
merci pour votre aide je vais essayer d'ameliorer le code
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0

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

Posez votre question
jhonbouda
 
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;
}

'''
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0