IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème programme en C


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut Problème programme en C
    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.

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    strcmp renvoie 0 si les deux chaine de caractere sont identique. MemeVille est donc faussé

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Effectivement j'avaias complètement zappé ça. J'ai corrigé memeVille, et ça marche pour le premier bloc d'instructions.

    Des fois j'suis vraiment con.

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    strcmp(v.NomVille, w.NomVille)==1
    Il est preferable d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcmp(v.NomVille, w.NomVille)>0
    Dans la litérature, on specifie que strcmp renvoie 0, un nombre negatif ou un nombre positif.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Bon j'ai un autre problème, dans le même programme.

    J'ai organisé le main en menu, avec 3 sous-blocs d'instructions qu'on active en donnant la valeur 0, 1 ou 2 à la variable (choix).

    J'ai défini un type "reseau", qui contient deux "int" et un tableau de "route", comme expliqué dans mon premier message.

    Voici le code jusqu'à présent :

    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
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    #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)==0)&&(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;}
     
    int seSuivent(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;
    }
     
    route creerRoute2(route r, route s)
    {route z;
    if ((memeVille(r.a, s.a)==0)&&(memeVille(r.a, s.b)==0)) z.a=r.a;
    else if ((memeVille(r.b, s.a)==0)&&(memeVille(r.b, s.b)==0)) z.a=r.b;
     
    if ((memeVille(s.a, r.a)==0)&&(memeVille(s.a, r.b)==0)) z.b=s.a;
    else if ((memeVille(s.b, r.a)==0)&&(memeVille(s.a, r.b)==0)) z.b=s.b;
     
    z.dis=(r.dis+s.dis);
     
    return z;
    }
     
     
    typedef struct{int nbr, nbrmax;
                   route *ens;}reseau;  
     
     
    reseau creerReseau(int nbr)
    {reseau res;
     
    res.nbrmax=nbr;
    res.nbr=0;
    return res; 
    }                
     
    route laRoute(int i, reseau res)
    {route r;
    r=res.ens[i];
    return r;
    }
     
    void ajouterRoute(route r, reseau *res)
    {(*res).ens[(*res).nbr]=r;
    (*res).nbr=(*res).nbr+1;
    }
     
    int estDans(route r, reseau res)
    {int i;
    i=0;
    while ((memeRoute(res.ens[i], r)==0)&& (i<res.nbr))
    i++;
    if (i==res.nbr) return 0;
    else return 1;
    }
     
    int bonneRoute(route r, reseau res)
    {int i, j;
    i=0; j=0;
    while (i<res.nbr)
    {j=meilleur(r, res.ens[i]);
    if (j==1) return 1;
    else i++;
    }
     
    if (i==res.nbr) 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 seSuivent(route, route);
    route creerRoute2(route, route);
    reseau creerReseau(int);
    route laRoute(int, reseau);
    void ajouterRoute(route, reseau*);
    int estDans(route, reseau);
    int bonneRoute(route, reseau);
     
     
     
    int main(int argc, char *argv[])
    { int i, j, k, m, z, nb1, nb2, affiche;
    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, y, r;
    reseau res1, res2;
     
    int choix;
     
    printf("\n                            ******* MENU *******\n");
    printf("\n");
     
    printf("\nTapez 0 pour le traitement des villes.\n");
    printf("\nTapez 1 pour le traitement des routes.\n");
    printf("\nTapez 2 pour le traitement des reseaux.\n");
     
    printf("\n");
     
    printf("\nChoisissez quelle partie du programme vous voulez executer : \n ");
    scanf ("%d", &choix);
     
     
    if (choix==0)
    {  
    Nom1=(char*)malloc(50*sizeof(char));
    if (!Nom1){printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }         
    printf("\nDonnez 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));
    if (!Nom2) {printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }
     
    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));
    if(!Nom) {printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }
     
    printf("\nDonnez 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));
    if(!Nom1) {printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }
     
    printf("\n\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));
    if(!Nom2) {printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }
     
    printf("\n\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));
    if (!Nom3) {printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }
     
    printf("\n\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));
    if (!Nom4) {printf(" Probleme d'allocation dynamique, le programme va s'arreter\n");
               exit(-1);
               }
     
    printf("\n\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\n");
    scanf("%lf", &d1);
     
    r1=creerRoute(V1, V2, d1);
     
    printf ("\n", r1.a.NomVille);
     
    printf("\nDonnez la longueur de la 2eme route\n");
    scanf("%lf", &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");
               z=meilleur(r1, r2);
               if (z==1) printf("\nLa route r1 est plus courte que r2.\n");
               else printf ("\nLa route r2 est plus courte que r1.\n");
               }
    else printf("\nLes deux routes relient des villes differentes.\n");
     
    k=memeRoute(r1, r2);
    if (k==1) printf("\nLes deux routes sont identiques.\n");
    else {printf ("\nLes deux routes sont differentes.\n");
          m=seSuivent(r1, r2);
          if (m==1) {printf("\nLes deux routes sont reliees par une ville intermediaire.\n");
                     y=creerRoute2(r1, r2);
                     printf ("\nLa nouvelle route est :\n");
                     printf("Ville1=%s, Ville2=%s, Distance=%lf", y.a.NomVille, y.b.NomVille, y.dis);
                     }
          else printf("\nLes deux routes ne sont pas reliees par une ville intermediaire.\n");
          } 
     
    }
     
     
    if (choix==2)
    {
    printf("\nRemplissage des reseaux :\n");
    printf("-------------------------\n");
    printf("\nDonnez la capacite maximale du 1er reseau :\n"); 
    scanf("%d", &nb1);
    res1=creerReseau(nb1);
     
    res1.ens=(route*)malloc(nb1*sizeof(route));
    if (!res1.ens){printf("\nerreur d'allocation dynamique\n");
                   exit(-1);}
     
     
    printf("\nDonnez la capacite maximale du 2eme reseau :\n");
    scanf("%d", &nb2);
    res2=creerReseau(nb2);
     
     
    res2.ens=(route*)malloc(nb2*sizeof(route));
    if (!res2.ens){printf("\nerreur d'allocation dynamique\n");
                   exit(-1);}
     
     
    printf("\nLe 1er Reseau :\n");
    printf("---------------\n");
    printf("\n");
     
    for (i=0; i<res1.nbrmax; i++)
    {
    printf("\nLa Route %d :\n", i+1);
    printf("-------------\n");
    r.a.NomVille=(char*)malloc(50*sizeof(char));
    if (!r.a.NomVille){printf ("\nerreur d'allocation dynamique\n");
                      exit(-1);
                      } 
    printf("\nDonnez le nom de la 1ere ville :\n");
    scanf("%s", r.a.NomVille);
    printf("\nDonnez le nombre de ses habitants :\n");
    scanf("%d", &r.a.nbh);
     
    r.b.NomVille=(char*)malloc(50*sizeof(char));
    if (!r.b.NomVille){printf ("\nerreur d'allocation dynamique\n");
                      exit(-1);
                      } 
    printf("\nDonnez le nom de la 2ere ville :\n");
    scanf("%s", r.b.NomVille);
    printf("\nDonnez le nombre de ses habitants :\n");
    scanf("%d", &r.b.nbh);
     
    printf("\nDonnez sa longueur :\n");
    scanf("%lf", &r.dis);
     
    ajouterRoute(r, &res1);
    printf("\n");
    }
     
     
    printf("Le 2eme Reseau :\n");
    printf("---------------\n");
    printf("\n");
    for (i=0; i<res2.nbrmax; i++)
    {
    printf("\nLa Route %d :\n", i+1);
    printf("-------------\n");
    r.a.NomVille=(char*)malloc(50*sizeof(char));
    if (!r.a.NomVille){printf ("\nerreur d'allocation dynamique\n");
                      exit(-1);
                      } 
    printf("\nDonnez le nom de la 1ere ville :\n");
    scanf("%s", r.a.NomVille);
    printf("\nDonnez le nombre de ses habitants :\n");
    scanf("%d", &r.a.nbh);
     
    r.b.NomVille=(char*)malloc(50*sizeof(char));
    if (!r.b.NomVille){printf ("\nerreur d'allocation dynamique\n");
                      exit(-1);
                      } 
    printf("\nDonnez le nom de la 2ere ville :\n");
    scanf("%s", r.b.NomVille);
    printf("\nDonnez le nombre de ses habitants :\n");
    scanf("%d", &r.b.nbh);
     
    printf("\nDonnez sa longueur :\n");
    scanf("%lf", &r.dis);
     
    ajouterRoute(r, &res2);
    }             
     
    i=0;
     
    printf("\nVoulez-vous afficher un reseau ? \n");
    scanf("%d", &affiche);
    if (affiche==1){printf("Affichage du 1er reseau : \n");
                    for (i=0; i<res1.nbrmax; i++)
                    printf("%s",res1.ens[i].a.NomVille);
                    printf("---%s",res1.ens[i].b.NomVille);
     
                    printf("\n");
     
                    printf("Affichage du 2eme reseau : \n");
                    for (i=0; i<res2.nbrmax; i++)
                    printf("%s",res2.ens[i].a.NomVille);
                    printf("---%s",res2.ens[i].b.NomVille);
                    }          
     
     
     
     
    }
     
    system("PAUSE");	
    return 0;
    }

    Quand vient la partie de l'affichage (je choisis d'afficher en tapant 1), le programme ne m'affiche pas ce qu'il faut et de plus, il plante carrément.

    (Mettons que chaque réseau contient qu'une seule route : il m'affiche la 1ere ville de la 1ere route du res1 avec 1ere ville de la 1ere route du res2, alors qu'il devrait m'afficher la 2ème ville...etc, j'pense que vous voyez le problème).

    De plus, j'ai encore un problème avec une fonction en particulier, celle qui fait l'union de deux réseaux (donnés en entrée) et que retourne le fruit de cette union.
    J'ai cherche la solution depuis au moins une semaine sans résultat, une aide serait la bienvenue, merci.

    Il me reste vraiment peu de temps, et si j'ai posté ici en demandant une solution, c'est que j'ai vraiment épuisé tous mes autres moyens.

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Tu as visiblement quelques petits soucis au niveau de chaînes de formats :

    E:\projet\test_DVP\main.c||In function `main'
    E:\projet\test_DVP\main.c|167|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|180|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|201|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|214|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|227|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|240|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|253|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|262|warning: too many arguments for format|
    E:\projet\test_DVP\main.c|334|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|343|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|367|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|376|warning: int format, long int arg (arg 2)|
    E:\projet\test_DVP\main.c|133|warning: unused parameter 'argc'|
    E:\projet\test_DVP\main.c|133|warning: unused parameter 'argv'|
    A ta place, j'essaierais tout d'abord de régler ces soucis.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Pour un long int, le format c'est bien "%d" non ? Je me fais toujours avoir par ce genre d'erreurs...

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Mad-7 Voir le message
    Désolé de faire l'idiot, mais en toute honnêteté je ne sais pas trop comment régler ces problèmes là. Tout du moins, le problème ne me saute pas aux yeux quoi.
    Concernant les warning "warning: int format, long int arg (arg 2)" ils indiquent que dans la chaîne de format tu attends un int (%d) alors que le paramètre correpondant est un long. Il suffit de remplacer le %d par %ld.

    Pour le warning "warning: too many arguments for format", il correspond à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("\n", r1.a.NomVille);
    ici il n'y a d'après la chaîne de format pas de paramètres pourtant tu en passes un. Suivant ce que tu voualis faire c'est soit
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%s\n", r1.a.NomVille);

  9. #9
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Oui oui, je vois maintenant. J'ai corrigé.

    Et pour ceux là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    E:\projet\test_DVP\main.c|133|warning: unused parameter 'argc'|
    E:\projet\test_DVP\main.c|133|warning: unused parameter 'argv'|
    Je suppose que c'est normal vu que les deux paramètres ne sont pas utilisés dans la fonction.

    Ça bug toujours à l'affichage parcontre.

  10. #10
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Mad-7 Voir le message
    Je suppose que c'est normal vu que les deux paramètres ne sont pas utilisés dans la fonction.
    Oui, tu peux utiliser int main(void) pour ne plus avoir ce warning, mais il n'est vraiment pas important.

    Citation Envoyé par Mad-7 Voir le message
    Ça bug toujours à l'affichage parcontre.
    Peux tu indiquer :
    • Ce qu'est censé faire ce programme.
    • Avec quelles données de test tu as ton problème.
    • Ce que tu observes.
    • Ce que tu pensais obtenir.

  11. #11
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Ce programme traite des villes, routes et reseaux.

    Il est organisé en 3 sous-menus. Pour les 2 premiers c'est réglé.

    Pour le 3ème, celui des reseaux c'est plus compliqué. Tout d'abord, il y a une création de deux reseau (vides donc), ensuite, ils sont remplis suivant ce que veut l'utilisateur (nombre de routes à entrer dans le tableau en fait).

    Pour le moment, j'ai juste testé l'affichage.
    Mettons qu'on a 2 route par reseau, normalement il affiche dans ce style là :

    "ville1-route1-reseau1"-----"ville2-route1-reseau1"
    "ville1-route2-reseau1"-----"ville2-route2-reseau1"...etc.

    Et ainsi de suite. Seulement, il ne m'affiche rien de cela, vu qu'il fait plutôt :

    "ville1-route1-reseau1"---"ville1-route2-reseau1"

    puis bug...

    Voilà j'espère avoir été clair.

    PS : Le type "reseau" est défini par 3 champs : deux int (l'un pour le nombre de ses routes, l'autre pour le nb max de routes qu'il peut contenir), et un tableau de toutes les route qu'il contient.

  12. #12
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Sans avoir déroulé tout le code, il y a au moins une erreur ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i=0; i<res1.nbrmax; i++)
    printf("%s",res1.ens[i].a.NomVille);
    printf("---%s",res1.ens[i].b.NomVille);
    Le second printf () est effectué alors que tu es sortie de la boucle, à ce moment là i est égal à res1.nbrmax est tu tapes donc en dehors de ton tableau. Je serais tenté de dire qu'il te maque des accolades.

    Sinon quelques remarques :

    Il faut vraiment songer à mieux présenter ton code car là ça ne donne pas envie de lire. Il faudrait donc:
    • Indenter un peu mieux
    • Mettre des noms de variables plus significatifs
    • Découper en fonctions élémentaires
    • Rajouter des commentaires


    Tes saisies ne sont pas très robustes :
    • Pas de vérification du retour de scanf()et de traitement approprié (rentre une lettre là où un chiffre est attendu et vois le résultat)
    • Pas de vérification de la taille des chaînes saisies

  13. #13
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Je sais bien qu'il lui manque pas mal de choses, comme le filtrage de donnés (quand un int est attendu par exemple).

    C'est surtout les fonctions qui vont être notées par ma prof, et leur appels également, plus que la structure du main, c'est pour cela que je n'ai pas trop pris le temps de vérifier les moindres détails.

Discussions similaires

  1. Problème Programmation MFC
    Par xyz dans le forum MFC
    Réponses: 17
    Dernier message: 13/05/2006, 20h00
  2. Problème Programmation MFC
    Par xyz dans le forum Réseau
    Réponses: 3
    Dernier message: 13/05/2006, 14h36
  3. [Problème] Programme huit reines
    Par thegreatbato dans le forum C
    Réponses: 20
    Dernier message: 04/05/2006, 22h04
  4. Problème programmation : log
    Par rootsl dans le forum C
    Réponses: 4
    Dernier message: 29/03/2006, 11h26
  5. Problème programmation objet
    Par Contrec dans le forum MFC
    Réponses: 54
    Dernier message: 30/03/2005, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo