begin process at 2012 05 27 17:52:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > PRINTF MAISON: FONCTION AVEC PARAMÈTRES ILLIMITÉS

PRINTF MAISON: FONCTION AVEC PARAMÈTRES ILLIMITÉS


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Niveau :Débutant Date de création :26/11/2002 Date de mise à jour :26/11/2002 18:59:11 Vu :4 230

Auteur : Athanor

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

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

  • #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);
  • }
#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"


 Sources du même auteur

Source avec Zip Source avec une capture JEU DE PACMAN EN DIRECTX
COUTEZ ET CINEZ VOUS PROPRE CLASSES!
Source avec Zip CHANGER LES COULEURS SYSTÈME DE WINDOWS
CONVERTIR EN BINAIRE PAR DÉCALLAGES DE BITS

 Sources de la même categorie

Source avec Zip Source avec une capture EVAL EXPRESSION COMPLEXE EN 15 LIGNES DE CODE par yann_lo_san
Source avec Zip SCHEDULER RR FIFO par yvesB87
Source avec Zip ALGORITHMES RÉCURSIFS VS ALGORITHMES ITÉRATIFS par yvesB87
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70

Commentaires et avis

Commentaire de Xs le 26/11/2002 21:11:22

tres utile

Commentaire de tavernier le 26/11/2002 21:51:42

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.

Commentaire de Pyou le 27/11/2002 16:37:28

Tres bonne source. Simple et efficace.

Commentaire de trinitacs le 27/11/2002 16:44:59

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 :(

Commentaire de trinitacs le 29/11/2002 16:35:40

Arf je voulais dire liste chaînée et non pas pile.

Commentaire de Calak le 15/09/2004 16:27:20

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...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales