Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/10/2020, à 16:08

zephyre123

question sur une expression [RESOLU]

Bonjour,

Voici le code suivant :

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// Un pointeur de pointeur est exactement la meme chose qu'un vecteur de pointeur
// **p <=> *p[] mais ATTENTION pas la même chose qu'une matrice p[][]

static void traiter(char *s)
{
	printf("- recu : %s\n", s);
}

int main(int argc, char *argv[])
{
	char **p = argv;

	while(true)
	{
		if(--argc <= 0) // Je ne comprends pas cette ligne ?
			break;

		p++;
		traiter(*p);
	}

	return EXIT_SUCCESS;
}

Ce que je ne comprends pas dans ce code c'est cela : if(--argc <= 0) pouvez vous me l'expliquer ou bien me l'écrire différemment en séparant argc de l'opérateur --
car j'ai essayé le code suivant :

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// Un pointeur de pointeur est exactement la meme chose qu'un vecteur de pointeur
// **p <=> *p[] mais ATTENTION pas la même chose qu'une matrice p[][]

static void traiter(char *s)
{
	printf("- recu : %s\n", s);
}

int main(int argc, char *argv[])
{
	char **p = argv;

	while(true)
	{
		if(argc <= 0)
		{
			argc--;
			break;
		}

		p++;
		traiter(*p);
	}

	return EXIT_SUCCESS;
}

Et ce code ne donne pas du tout les mêmes résultat que le premier et je ne comprends pas pourquoi ?
Pouvez vous me donner une explication svp ?

Dernière modification par zephyre123 (Le 04/10/2020, à 17:04)

Hors ligne

#2 Le 04/10/2020, à 16:23

pingouinux

Re : question sur une expression [RESOLU]

Re-bonjour,
Quand tu écris

if(--argc <= 0)

la variable argc est décrémentée avant de faire le test. Dans ta boucle, tu fais le test et décrémente la variable après.

argc=5;
v=--argc; // v=4; argc=4
v=argc--; // v=4; argc=3

Hors ligne

#3 Le 04/10/2020, à 17:01

zephyre123

Re : question sur une expression [RESOLU]

Ok pingouinux j'ai maintenant compris en faite il n'y a jamais de break avec le second programme car la condition (argc <= 0) n'est jamais valider du coup on boucle sur le reste .
Bref j'ai tout compris.
C'est hyper subtil tout de même !
Merci encore pingouinux.

Dernière modification par zephyre123 (Le 04/10/2020, à 17:03)

Hors ligne