我试图让这段代码发挥作用:
#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;
}
除了函数afficherTabFacture(tabFactures)
的输出外,一切正常,而不是给我输入的字符串赋予特殊字符,或者它给出O或空值。这是一张图片:
你能帮我解决一下吗?
答案 0 :(得分:1)
您的代码中存在多个问题:
saisirFacture
按值返回Facture
,但您不存储此返回值,而是在Facture
中传递saisirTabFacture
作为参数。< / p>
tabFactures
中有本地数组main
,同名的全局变量:main
和saisirTabFacture
不是指同一个数组。< / p>
afficheTabFacture
应该传递Facture
个对象,而不是Facture
个对象的数组。
这是一个修改后的版本,它将提示2张钞票,然后打印出来:
#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;
}