Une boucle for bizarre

Résolu/Fermé
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017 - Modifié par dx3d le 14/04/2015 à 16:09
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 - 14 avril 2015 à 17:22
Bonjour, je révise mes cours pour mes partiels de fin de semestre et je suis tombé sur une boucle for dans le code de notre enseignant que j'ai du mal à bien comprendre :

for (; id < *max_fd; ++id) {
if (old_set[id] == new_fd) {
break;
}
}


donc j'aimerais juste savoir si c'est correcte d'écrire la boucle comme cela sachant qu'il a bien marqué id = 0 plus haut dans le code.
A voir également:

2 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
14 avril 2015 à 16:23
Salut,

en fait ce que tu places dans un if avant la première occurrence du ";", c'est ce qui va se passer à l'initialisation de la boucle for (1 fois) puis après c'est la condition de sortie de la boucle, puis ce qui se passe à chaque itération.
Dans ton cas, pas la peine de définir id = 0 à cette emplacement vu que comme tu l'as remarqué la variable id est définit plus haut.
0
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017
14 avril 2015 à 16:54
Rebonjour, merci pour la réponse mais la je me retrouve avec une question similaire :

Voici l'une des fonction de notre code
static void handle_client_req(char * req, int fd) {
char * space;
unsigned int param;
size_t len;

len = strlen(req);
/* format: <code(3)><space(1)><param(1+)> */
if (len < 5) {
/* Invalid req */
return;
}

space = strchr(req, ' ');
if (space == NULL) {
/* Invalid req */
return;
}

param = strtol(space, NULL, 10);

if (strncmp(req, "SLP", 3) == 0) {
#ifndef __WIN32
sleep(param);
#else
Sleep(param * 1000);
#endif

strncat(req, " = OK", MAX_BUFFER_SIZE - len - 1);
} else if (strncmp(req, "FCT", 3) == 0) {
unsigned long res = 1;
char buffer[MAX_BUFFER_SIZE / 2];

while (param > 0) {
res *= param;
--param;
}

snprintf(buffer, MAX_BUFFER_SIZE / 2, " = %lu\n", res);
strncat(req, buffer, MAX_BUFFER_SIZE - len - 1);
} else {
/* Invalid req */
return;
}

/* And send (null chr included) */
if (send(fd, req, sizeof(char) * (strlen(req) + 1), 0) == -1) {
fprintf(stderr, "Erreur à l'envoi\n");
}

return;
}


Les "return;" retourne quoi au juste ? :/
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
14 avril 2015 à 17:00
A vérifier car ça fait longtemps que je n'ai pas fait de C, mais je pense qu'ils retournent rien à en juger le type défini du retour "void".

Ceci est valable dans tous les langages de programmation, faire ça c'est pour sortir de la fonction sans exécuter le code suivant.

Dans ton exemple, dès le début, ça test la taille de la chaine de caractère fourni en paramètre et si cette dernière ne correspond pas aux normes définies, ça sort directement de la fonction sans avoir a exécuter le code qui suit qui devient alors inutile car le paramètre ne correspond pas à ce qu'on attend pour le bon fonctionnement de la fonction.
0
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017 > Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015
14 avril 2015 à 17:03
Merci beaucoup ! Je comprend beaucoup mieux le code du coup ! :p
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
14 avril 2015 à 17:22
Pas de soucis, quand on peut aider ;)
0