bonsoir à tous,
j'ai un soucis pour la suppression dans ma liste, je vais commencer par vous exposer le code
structure client
code pour ajouter un nouveau client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 typedef struct clientinfo { char uid[UIDLEN+1]; char nick[NICKLEN+1]; char user[USERLEN+1]; char host[HOSTLEN+1]; char name[REALLEN+1]; char modes[MODELEN+1]; char server[SIDLEN+1]; struct clientinfo *next; time_t uptime; } aClient;
et le code pour la suppression
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 aClient *client_head = NULL; /* contient le pointeur de tête */ int add_client(const char *uid, const char *nick, const char *user, const char *host, const char *server, const char *modes, const char *name) { aClient *c; c = calloc(1, sizeof(*c)); if (!c) { printf("add_client(): out of memory\n"); return 0; } strncpy(c->nick, nick, NICKLEN); strncpy(c->user, user, USERLEN); strncpy(c->host, host, HOSTLEN); strncpy(c->uid, uid, UIDLEN); strncpy(c->server, server, SIDLEN); strncpy(c->modes, modes, MODELEN); strncpy(c->name, name, REALLEN); c->next = NULL; c->uptime = time(NULL); if (client_head == NULL) client_head = c; else { while (client_head->next != NULL) { client_head = client_head->next; } client_head->next = c; } return 1; }
je n'ai aucun bug (pour le moment) mais le code ne fait pas son boulot, lorsqu'un client se deconnecte la fonction del_client est invoquée, pour vérifier a la fin j'affiche la liste des clients restant et le probleme est que le client censé être déconnecté apparait toujours, j'ai lu plusieurs tuto sur les listes chainées et notament sur la suppression dans une liste mais je n'arrive pas a reproduire, je vous remerci par avance pour votre aide
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 void del_client(const char *uid) { aClient *c = client_head; aClient *d; while (c != NULL) { if (!strcasecmp(uid, c->uid)) { d = c; break; } c = c->next; } free(d); /* affichage de la nouvelle liste */ while (client_head != NULL) { printf("CLIENT RESTANT: %s\n", client_head->nick); client_head = client_head->next; } }
Partager