Bonsoir
J'ai codé en C un programme de gestion simple d'un réseau de communication
la compilation a réussi mais il parait qu'il y a des problèmes au niveaux de l’exécution
voila le code
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
 
 
struct ports_physiques
{
    int nbr_ports;
    int ports[10];
};
 
struct adresse_ip
{
    char ip[20];
};
 
struct interfaces
{
    int nbr_interfaces;
    struct adresse_ip adr_ip[10];
};
 
struct noeud
{
    char libelle[10];
    struct ports_physiques ports_phy;
    struct interfaces inter;
    char protocole[10];
};
 
void ajouter_noeud (struct noeud *n)
{   int i;
    printf("donner le libelle \n");
    gets(n->libelle);
    printf("donner le nombre des ports physiques \n");
    scanf("%d",&n->ports_phy.nbr_ports);
    printf("donner l'ensemble des ports physiques \n");
    for (i=0;i<=n->ports_phy.nbr_ports-1;i++)
        scanf("%d",&n->ports_phy.ports[i]);
    printf("donner le nombre des interfaces \n");
    scanf("%d",&n->inter.nbr_interfaces);
    printf("donner les adresses ip correspendantes \n");
    for (i=0;i<=n->inter.nbr_interfaces;i++)
        gets(n->inter.adr_ip[i].ip);
    printf("donner le protocole de routage \n");
    gets(n->protocole);
}
 
void afficher_noeud (struct noeud n)
{   int i;
    printf(" le libelle \n");
    printf("%s \n",n.libelle);
    printf(" le nombre des ports physiques \n");
    printf("%d \n",n.ports_phy.nbr_ports);
    printf(" l'ensemble des ports physiques \n");
    for (i=0;i<=n.ports_phy.nbr_ports-1;i++)
        printf("%d \n",n.ports_phy.ports[i]);
    printf(" le nombre des interfaces \n");
    printf("%d \n",n.inter.nbr_interfaces);
    printf(" les adresses ip correspendantes \n");
    for (i=1;i<=n.inter.nbr_interfaces;i++)
        printf("%s \n",n.inter.adr_ip[i].ip);
    printf(" le protocole de routage \n");
    printf("%s \n",n.protocole);
}
 
void modifier_noeud (struct noeud *n)
{
    int supprimer,modifier,x,i;
    printf("choisir l'operation a faire \n");
    printf("taper 1 pour ajouter une interface \n");
    printf("taper 2 pour supprimer une interface \n");
    printf("taper 3 pour modifier les interfaces presentes \n");
    scanf("%d",&x);
switch (x)
    {   case 1 : {
            printf("donner l'adresse ip correspendante \n");
            scanf("%s",&n->inter.adr_ip[n->inter.nbr_interfaces+1].ip);
            n->inter.nbr_interfaces++;
            break;
                }
        case 2 : {
                 printf("quelle interface voulez vous supprimer ? \n");
                 for (i=1;i<=n->inter.nbr_interfaces;i++)
                 {
                     printf("%d \n",i);
                     printf("%s \n",&n->inter.adr_ip[i].ip);
                 }
                     scanf("%d",&supprimer);
              for (i=supprimer;i<=n->inter.nbr_interfaces;i++)
              strcpy(&n->inter.adr_ip[i].ip,&n->inter.adr_ip[i+1].ip);
              n->inter.nbr_interfaces--;
                 break;
                 }
        case 3 : { printf("quelle interface voulez vous modifier ? \n");
                   for (i=1;i<=n->inter.nbr_interfaces;i++)
                    {
                     printf("%d \n",i);
                     printf("%s \n",&n->inter.adr_ip[i].ip);
                    }
                   scanf("%d",&modifier);
                   printf("taper la nouvelle adresse ip \n");
                   scanf("%s",&n->inter.adr_ip[modifier].ip);
                 }
        default :
 
            printf("error \n");
    }
}
 
 
struct noeud n;
 
typedef struct noeud tab[10];
tab t;
int choix,i,k=0,s,m,er;
 
void main()
{ char li[10];
    printf("il existe \n");
    printf("%d \n",k);
    printf("noeud(s) \n");
    printf("indiquer l'operation souhaitee \n");
    printf("1 pour ajouter un noeud \n");
    printf("2 pour supprimer un noeud \n");
    printf("3 pour chercher un noeud \n");
    printf("4 pour modifier la configuration des interfaces d'un noeud \n");
    scanf("%d",&choix);
    switch (choix)
    {
        case 1 : {
                  ajouter_noeud(&t[k]);
                  k++;
                  main();
                  break;
                 }
        case 2 :        {
                    printf("quel est le noeud à supprimer \n");
                    for (i=0;i<=k-1;i++)
                    printf("%s",&t[i].libelle);
                    scanf("%d",&s);
                    for (i=s+1;i<=k;i++)
                    t[i+1]=t[i];
                    k--;
                    break;
                     }
        case 4 :      {
                    printf("quel est le noeud à modifier \n");
                    for (i=0;i<=k-1;i++)
                    printf("%s",&t[i].libelle);
                    scanf("%d",&m);
                    modifier_noeud(&t[m]);
                    break;
                      }
        case 3 : {  printf("entrer le libelle du noeud à chercher \n");
                    scanf("%s",&li);
                    for (i=0;i<=k-1;i++)
                    {
                        if (li==&t[i].libelle)
                        {
                         er=i;
                        }
                    }
                    if (er>=0)
                    {
                        printf("le noeud est \n");
                        afficher_noeud(t[er]);
                        }
                    else
                        printf("pas de resultat \n");
                        break;
                        }
         default : printf("choix non valide \n");
    }
}
Lors de l'ajout d'un nouveau nœud , il n’accepte pas la saisie du libellé
Autre chose,je n'arrive pas à faire des saisies avec contrôles pour les éléments des structures (par exemple je veux un nombre d'interfaces réseau ne dépasse pas 10 etc...) il n'exécute pas correctement (je rencontre toujours ce genre de problèmes en travaillant avec les structures)
et une dernière remarque,je vous demande de me proposer une forme valide d'une adresse IP et la manière favorable de stocker une telle donnée (tableau des chaines comme j'ai fait ou structure etc...)
Merci d'avance pour vos aides
cordialement