我正在尝试使此代码工作:
#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或空值。这是一张图片:你能帮我解决吗?
最佳答案
您的代码中存在多个问题:saisirFacture
按值返回Facture
,但是您不存储此返回值,而是将Facture
作为参数传递给saisirTabFacture
。
在tabFactures
中有本地数组main
,并且有一个同名的全局变量:main
和saisirTabFacture
没有引用相同的数组。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;
}