简体   繁体   中英

Wrong output with C program

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM