I'm trying to get this code work:
#include <stdio.h>
#include <conio.h>
#define N 2
typedef struct identite {
char numClient[20];
char nom[20];
char prenom[20];
} Identite;
typedef struct facture {
int numFacture;
Identite personne;
float prix;
int anlimite;
} Facture;
Facture tabFactures[10];
// initialisation ???
Facture saisirFacture() {
Facture uneFacture;
printf("saisissez le numero de la facture: ");
scanf("%d", &uneFacture.numFacture);
printf("saisissez le numero du client: ");
scanf("%s", &uneFacture.personne.numClient);
printf("saisissez le nom du client: ");
scanf("%s", &uneFacture.personne.nom);
printf("saisissez le prenom du client: ");
scanf("%s", &uneFacture.personne.prenom);
printf("saisissez le prix: ");
scanf("%f", &uneFacture.prix);
printf("saisissez anlimite: ");
scanf("%d", &uneFacture.anlimite);
printf("Vous avez renseigné tous les champs, Merci.\n");
return uneFacture;
}
void saisirTabFacture() {
int i;
i = 0;
Facture fi;
while (i < N) {
tabFactures[i] = fi;
saisirFacture(fi);
i++;
}
getch();
}
void afficheFacture(Facture uneFacture) {
printf("le numero de la facture est:%d\n", uneFacture.numFacture);
printf("le numero du client est:%s\n", uneFacture.personne.numClient);
printf("le nom du client est:%s\n", uneFacture.personne.nom);
printf("le prenom du client est:%s\n", uneFacture.personne.prenom);
printf("le prix est:%f\n", uneFacture.prix);
printf("annee limite est:%d\n", uneFacture.anlimite);
getch();
}
void afficheTabFacture() {
Facture fi;
int i;
for (i = 0;i < N - 1;i++) {
tabFactures[i] = fi
afficheFacture(tabFactures);
}
}
int main() {
Facture tabFactures[N];
Facture uneFacture;
printf("la saisie des factures : \n");
saisirTabFacture();
printf("les factures qui vous avez saisi sont:");
afficheTabFacture(tabFactures);
return 0;
}
Everything works fine except the output of the function afficherTabFacture(tabFactures)
, instead of giving the strings I have entered it gives special characters, or it gives O or empty values. Here is an image:
Could you please help me to solve it?
There are multiple problems in your code:
saisirFacture
returns a Facture
by value, but you do not store this return value, instead you pass a Facture
as an argument in saisirTabFacture
.
There is local array tabFactures
in main
and a global variable by the same name: main
and saisirTabFacture
are not referring to the same array.
afficheTabFacture
should be passed a Facture
object, not an array of Facture
objects.
Here is a modified version that will prompt for 2 bills and then print them:
#include <stdio.h>
#include <conio.h>
#define N 2
typedef struct identite {
char numClient[20];
char nom[20];
char prenom[20];
} Identite;
typedef struct facture {
int numFacture;
Identite personne;
float prix;
int anlimite;
} Facture;
Facture saisirFacture(void) {
Facture uneFacture;
printf("saisissez le numero de la facture: ");
scanf("%d", &uneFacture.numFacture);
printf("saisissez le numero du client: ");
scanf("%19s", uneFacture.personne.numClient);
printf("saisissez le nom du client: ");
scanf("%19s", uneFacture.personne.nom);
printf("saisissez le prenom du client: ");
scanf("%19s", uneFacture.personne.prenom);
printf("saisissez le prix: ");
scanf("%f", &uneFacture.prix);
printf("saisissez anlimite: ");
scanf("%d", &uneFacture.anlimite);
printf("Vous avez renseigné tous les champs, Merci.\n");
return uneFacture;
}
void saisirTabFacture(Facture tabFactures[]) {
for (int i = 0; i < N; i++) {
tabFactures[i] = saisirFacture();
}
getch();
}
void afficheFacture(Facture uneFacture) {
printf("le numero de la facture est:%d\n", uneFacture.numFacture);
printf("le numero du client est:%s\n", uneFacture.personne.numClient);
printf("le nom du client est:%s\n", uneFacture.personne.nom);
printf("le prenom du client est:%s\n", uneFacture.personne.prenom);
printf("le prix est:%f\n", uneFacture.prix);
printf("annee limite est:%d\n", uneFacture.anlimite);
getch();
}
void afficheTabFacture(Facture tabFactures[]) {
for (int i = 0; i < N; i++) {
afficheFacture(tabFactures[i]);
}
}
int main(void) {
Facture tabFactures[N];
Facture uneFacture;
printf("la saisie des factures : \n");
saisirTabFacture(tabFactures);
printf("les factures qui vous avez saisi sont:");
afficheTabFacture(tabFactures);
return 0;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.