Une boucle for bizarre

Résolu
dx3d Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
Zep3k!GnO Messages postés 2025 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   200
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   200
 
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   Statut Membre Dernière intervention   > Zep3k!GnO Messages postés 2025 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup ! Je comprend beaucoup mieux le code du coup ! :p
0
Zep3k!GnO Messages postés 2025 Date d'inscription   Statut Membre Dernière intervention   200
 
Pas de soucis, quand on peut aider ;)
0