使用C程序输出错误

时间:2016-11-04 22:18:47

标签: c

我试图让这段代码发挥作用:

#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或空值。这是一张图片:

enter image description here

你能帮我解决一下吗?

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个问题:

  • saisirFacture按值返回Facture,但您不存储此返回值,而是在Facture中传递saisirTabFacture作为参数。< / p>

  • tabFactures中有本地数组main,同名的全局变量:mainsaisirTabFacture不是指同一个数组。< / 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;
}