Printf maison: fonction avec paramètres illimités

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 615 fois - Téléchargée 35 fois

Contenu du snippet

C'est une fonction qui gère un nombre illimité de paramètres, vous pouvez lui en transmettre 1,2,927... et il les affiches toutes.

Source / Exemple :


#include <iostream.h> //pour les cout
#include <stdarg.h> //pour les macros/type
#include <string.h> //pour strcat()

// Prototype de la fonction, num est le nombre de paramètres
// ... représente un nombre indéfini de paramètres
void printfmaison(int num,  ...);

void main()
{
	//qque chaines
	char lala[10] = "Lala"; 
	char str1[20] = "Copie de ";
	char str2[10] = "Chaines";

	//on call la fonction avec 5 paramètres supplémentaires:
	// 3 chaines constantes, 1 chaines variable, 1 retour de fonction
	printfmaison(5, "Salut", "Bonjour", "1982", lala, strcat(str1, str2));
}

void printfmaison (int num,  ...)
{

	//un simple typedef pour char*, gère les arguments supplémentaires
	va_list arguments; 

	//va_start: paramètre1: le pointeur d'argument
	// paramètre2: le dernier paramètre obligatoire (formel)
	// Cette macro indique que arguments sera le pointeur vers les arguments supplémentaires
	va_start(arguments, num); 

	//cette boucle fouille pour trouver tous les paramètres supplémentaires
	// num est le nombre de paramètres supplémentaires envoyé par la fonction
	for (int i = 0; i < num; i++)
		//va_arg: paramètre1: le pointeur d'argument
		// paramètre2: le type vers lequel doit pointer notre pointeur d'argument
		cout << va_arg(arguments,char*) << "\n";

	//termine le pointage (non essentiel dans ce contexte car la fonction termine)
	va_end(arguments);

}

Conclusion :


Voila, maintenant c'est à vous d'en créer des variantes, du genre "Afficher en nombre illimité de MessageBox" ou "Ajouter un nombre illimité d'éléments dans une ListBox"

A voir également

Ajouter un commentaire

Commentaires

Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010

juste un truc, je viens de le dire dans un autre commentaire, mais je le répère ;)
pk utiliser la librairiestdarg.h ?

perso, quand je veux un nombre de paramètres variable, je fais comme ça:

#include <stdio.h>

void foo(int nbelem, ...)
{
int i;
for(i = 1;i <= nbelem;i++)
{
printf("%d. %s\n", i, *(&nbelem+i));

}
}
int main(void)
{
foo(4, "foo", "bar", "mouhhaha", "powned!");
}



Après biensure, tu peux arranger comme tu veux...
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
Arf je voulais dire liste chaînée et non pas pile.
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
Sinon il y a une une autre méthode pour faire ça. Ça fait plus bricolo mais je la préfère. L'avantage on n'est pas obligé de donner le nombre d'arg au début mais simplement le début d'une pile. Arf oui ça demande plus de code à écrire dans la mais l'appel des fonctions est ensuite plus souple car ça ne prend qu'un argument et en prennant plusieurs, magic? non? bon je sors :(
Messages postés
19
Date d'inscription
vendredi 5 juillet 2002
Statut
Membre
Dernière intervention
27 juillet 2008

Tres bonne source. Simple et efficace.
Messages postés
47
Date d'inscription
mardi 1 octobre 2002
Statut
Membre
Dernière intervention
3 juin 2003

c'est très intéressant (et je ne suis pas ironique) car je ne savais pas comment gérer un nombre d'arguments illimité.
Cependant, je pense que je vais continuer a me servir des bonnes vieilles printf, sprintf, fprintf, etc.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.