J'ai un programme, ou plutôt non un ensemble de fonctions à écrire, puis à appeler dans main.
Il s'agit en fait de fonctions traitant des villes, des routes...etc

Tout d'abord, j'ai défini un type ville qui contient une chaine de caractères pour guise de nom de la ville, et son nombre d'habitants.

Ensuite, on défini le type route, qui contient deux villes, ainsi que la distance entre les deux (un double).

Bref, j'ai écrit le programme, jusqu'à présent ça donne ça :


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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct{char *NomVille;
                long int nbh;}ville;
 
 
ville creerVille(char *nom, long int population)
{ville v;
v.NomVille=nom;
v.nbh=population;
 
return v;} 
 
int memeVille(ville v, ville w)
{if ((strcmp(v.NomVille, w.NomVille)==1)&&(v.nbh==w.nbh)) return 1; 
    else return 0;}
 
typedef struct {ville a, b;
                double dis;}route;
 
route creerRoute (ville v, ville w, double distance)
{route r;
r.a=v;
r.b=w;
r.dis=distance;
 
return r;}
 
int appartient(ville v, route r)
{int i, k;
    i=memeVille(v, r.a);
    k=memeVille(v, r.b);
    if ((i==1)||(k==1))  return 1;
else return 0;}
 
int OntMemeVille(route r, route s)
{
if (((memeVille(r.a, s.a)==1)||(memeVille(r.a, s.b)==1))&&((memeVille(r.b, s.a)==1)||(memeVille(r.b, s.b)==1))) return 1;
else return 0;}
 
int memeRoute(route r, route s)
{if ((OntMemeVille(r,s)==1)&& (r.dis==s.dis)) return 1;
else return 0;}
 
int meilleur(route r, route s)
{if (r.dis<s.dis) return 1;
else return 0;}
 
 
ville creerVille(char *, long int);
int memeVille(ville, ville);
route creerRoute(ville, ville, double);
int appartient(ville, route);
int OntMemeVille(route, route);
int memeRoute(route, route);
int meilleur(route, route);
 
int main(int argc, char *argv[])
{ int i, j, k; 
long int n,n1,n2,n3,n4;
char *Nom,*Nom1,*Nom2,*Nom3,*Nom4;             
ville V,V1,V2,V3,V4;
double d1,d2;
route r1, r2;
 
int choix;
printf("\nChoissisez quelle partie du programme vous voulez executer : \n ");
scanf ("%d", &choix);
 
if (choix==0)
{  
Nom1=(char*)malloc(50*sizeof(char));
printf("Donnez le nom de la 1ere ville : \n");
scanf("%s", Nom1);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n1);
 
V1=creerVille(Nom1, n1);
 
Nom2=(char*)malloc(50*sizeof(char));
printf("\nDonnez le nom de la 2ème ville : \n");
scanf("%s", Nom2);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n2);
 
V2=creerVille(Nom2, n2);
 
i=memeVille(V1, V2);
 
if (i==1) printf("\nLes deux villes sont identiques");
else printf("\nLes deux villes sont differentes\n\n"); 
}
 
if (choix==1)
{
Nom=(char*)malloc(50*sizeof(char));
printf("Donnez le nom de la ville V : \n");
scanf("%s", Nom);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n);
 
V=creerVille(Nom, n);
 
Nom1=(char*)malloc(50*sizeof(char));
printf("\nDonnez le nom de la 1ere ville pour r1 : \n");
scanf("%s", Nom1);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n1);
 
V1=creerVille(Nom1, n1);
 
Nom2=(char*)malloc(50*sizeof(char));
printf("\nDonnez le nom de la 2eme ville pour r1 : \n");
scanf("%s", Nom2);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n2);
 
V2=creerVille(Nom2, n2);
 
Nom3=(char*)malloc(50*sizeof(char));
printf("\nDonnez le nom de la 1ere ville pour r2 : \n");
scanf("%s", Nom3);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n3);
 
V3=creerVille(Nom3, n3);
 
Nom4=(char*)malloc(50*sizeof(char));
printf("\nDonnez le nom de la 2eme ville pour r2 : \n");
scanf("%s", Nom4);
 
printf ("\nDonnez le nombre de ses habitants : \n"); 
scanf("%d", &n4);
 
V4=creerVille(Nom4, n4);
 
printf("\nDonnez la longueur de la 1ere route");
scanf("%g", &d1);
 
r1=creerRoute(V1, V2, d1);
 
printf ("\n", r1.a.NomVille);
 
printf("\nDonnez la longueur de la 2eme route");
scanf("%g", &d2);
 
r2=creerRoute(V3, V4, d2);
 
i=appartient(V, r1);
if (i==1) printf("\nLa ville %s appartient a la route r1\n", V.NomVille);
else printf ("\nLa ville %s n'appartient pas a la route r1\n", V.NomVille);
 
j=OntMemeVille (r1, r2);
if (j==1) printf ("\nLes deux routes relient les meme villes\n");
else printf("\nLes deux routes relient des villes differentes\n");
 
printf (r1.a.NomVille);
printf(V.NomVille);
 
}
system("PAUSE");	
return 0;
}
Le problème actuellement réside dans le fait que les fonctions OntMemeVille et appartient retournent toujours 0, quelques soient les paramètres donnés en entrée.

Après vérification, il s'agirait d'un problème concernant la fonction memeVille, qui retourne elle toujours 0 également, et comme je l'utilise dans les deux autres fonctions...

La fonction memeVille retourne également 0 dans le premier bloc d'instructions (choix=0).

Voilà j'sais pas si c'est clair pour vous, mais j'aimerais beaucoup une aide parce que je ne sais absolument pas quoi faire.