Bonjour,
Je suis débutant en C et je poste pour la 1ere fois sur ce forum.
Je souhaite stocker le résultat de la procédure remplirT, car j'ai besoin de ces informations dans les cas 'b', 'c', 'd', 'e' de mon switch case. J'ai pensé a ajouter remplirT(ptr, nb) dans chacun de ces cas, mais le programme s’arrête uniquement a cette ligne, et ne traite pas les autres fonctions, pourquoi ? Faudrait-il saisir les voitures dans tous les cas ? Comment stocker le résultat de cette procédure pour l'exploiter ensuite ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct Voiture
{
    char marque[40];
    int id;
    unsigned long int km;
    int etat;
};
 
void remplirT(struct Voiture *ptr, int nb);
void afficherT(struct Voiture *ptr, int nb);
void louableT(struct Voiture T[], int nb);
int rechercheRecursive(struct Voiture T[], int nb);
//void suppression(struct Voiture T[], int nb);
 
struct Voiture T[5000];
struct Voiture *ptr;
int nb;
 
int main()
{
    printf("Indiquez le nombre de voitures a saisir : ");
    scanf("%d", &nb);
    ptr = (struct Voiture *)malloc(nb * sizeof(struct Voiture));
 
    char choix;
    printf("\n\t\t*** MENU ***\t\t\n\n");
    printf("a : saisir des voitures\nb : afficher des voitures\nc : afficher des caracteristiques d'une voiture si possible\nd : rechercher une voiture\ne : supprimer des voitures\nf : fin du programme\n\n");
    getchar();
    scanf("%c", &choix);
 
    switch (choix)
    {
    case 'a' :
        remplirT(ptr, nb);
        break;
    case 'b' :
        afficherT(ptr, nb);
        break;
    case 'c' :
        louableT(T, nb);
        break;
    case 'd' :
        rechercheRecursive(T, nb);
        break;
    //case 'e' :
      //  suppression(T, nb);
        break;
    case 'f' :
        printf("Fin du programme\n");
        break;
    default :
        printf("Mauvais choix\n");
        break;
    }
 
    return (0);
}
 
void remplirT(struct Voiture *ptr, int nb)
{
    int x;
    for (x = 0; x < nb; x++)
    {
        printf("Saisir la marque %d : ", x + 1);
        scanf("%s", &(ptr + x)->marque);
        printf("Saisir le numero d'identification %d : ", x + 1);
        scanf("%d", &(ptr + x)->id);
        printf("Saisir le kilometrage %d : ", x + 1);
        scanf("%Lf", &(ptr + x)->km);
        printf("Saisir l'etat %d (0 pour disponible et 1 sinon) : ", x + 1);
        scanf("%d", &(ptr + x)->etat);
    }
}
 
void afficherT(struct Voiture *ptr, int nb)
{
    int x;
    for (x = 0; x < nb; x++)
    {
        printf("%s\t%d\t%Lf\t%d\n", (ptr + x)->marque, (ptr + x)->id, (ptr + x)->km, (ptr + x)->etat);
    }
}
 
void louableT(struct Voiture T[], int nb)
{
    int ID, a, x;
    printf("Numero d'identification de la voiture a louer : ");
    scanf("%d", &ID);
 
    for (a = 0; a < nb; a++)
    {
        if (ID == T[a].id)
        {
            printf("Cette voiture est en location : ");
            printf("Voici ces caracteristiques : \n");
            for (x = 0; x < nb; x++)
                printf("Numero d'identification : %d\t Kilometrage : %Lf\t Etat : %d\n", T[x].id, T[x].km, T[x].etat);
        }
        else
        {
            printf("Erreur, cette voiture n'existe pas\n");
        }
    }
}
 
int rechercheRecursive(struct Voiture T[], int nb)
{
    int ID, x;
    printf("Donner un identifiant : ");
    scanf("%d", &ID);
 
    if (nb > x) return 0;
    if (ID == T[x].id)
        return printf("Marque : %s, %d i-eme element\n", T[x].marque, rechercheRecursive(++T, --nb));
}
 
/*
void suppression(struct Voiture T[], int nb)
{
    char marques[40];
    char *pMarque = marques;
    int x;
    printf("Donnez une marque : ");
    fgets(pMarque, 40, stdin);
 
    if (pMarque == T.marque)
    {
 
    }
}
*/
Merci d'avance