Utilisation avancée de printf.

Un exemple fait de sous exemples parcourant les diverses fonctionnalités de printf

printf

Voir version :

Pas de dépendances

Télécharger :

#include <stdio.h>

void test1()
{
    int i;
    for(i=0;i<100000;i++)
        printf("%d\r",i);
}

void test2()
{
    char a = 'A';
    //char a = 65;
    a+=1;
    printf("%d\n",a);
    printf("%c\n",a);
}

void test3()
{
    float f = -35.264725f;
    printf("%f\n",f);
    printf("%d\n",f);
    printf("%d\n",(int)f);
}

void test4()
{
    int i;
    float f = 1.1519612f;
    printf("%f\n",f);
    printf("%.7f\n",f);
    printf("%.2f\n",f);
    printf("%.3f\n",f);
    i = 5;
    printf("%.*f\n",i,f);
    i = 1;
    printf("%.*f\n",i,f);
}

void test5()
{
    int i;
    float f;
    int* p;
    i = 335;
    printf("%d\n",i);
    printf("%x\n",i);
    printf("%X\n",i);
    printf("%o\n",i);

    f = 3547.15f;
    printf("%f\n",f);
    printf("%e\n",f);
    printf("%E\n",f);

    p = &i;
    printf("%p\n",p);
    p = NULL;
    printf("%p\n",p);
}

void test6()
{
    printf("\a");
    printf("%%\n");
    printf("\\\n");
    printf("\"plouf\"\n");
    printf("\'plouf\'\n");
    printf("\x7F\n");
    printf("plouf\bm\n");
}

int main()
{
    test1();
    //test2();
    //test3();
    //test4();
    //test5();
    //test6();
    return 0;
}



Commentaires

	Quelques exemples pour printf, découpés en différents tests. Activez les au fur et a mesure en les décommentant dans le main.

	test1 : l'utilisation \r pour revenir au début de la ligne est pratique, pour faire un pourcentage par exemple.
			On écrit quelque chose, et \r remet au début de la ligne. Réécrire par dessus va écraser ce qu'il y a déjà.

	test2 :
			Voici un autre test intéressant, qui montre l'importance du type de sortie. 
			Comme vous le savez, un char permet de stocker un caractère. En réalité, il contient un nombre.
			La preuve, je fais a+=1 sans soucis.
			Le caractère, lui, ne dépend que de l'affichage : si j'affiche avec %c, j'affiche le caractère, 
			mais si j'affiche avec %d la même variable, j'affiche le nombre.
			D'ailleurs, si on commente la première déclaration du char, et qu'on décommente la deuxième, cela revient au même.
			
			Rappelez vous, les '' veulent dire CODE ASCII DE. Ainsi, quand vous dites que char a = 'A', vous dites = CODE ASCII DE A, autrement dit 65 :
			le compilateur stocke 65 directement.
			(* certains me diront qu'il existe d'autres normes que l'ASCII, mais sur nos machines usuelles, on utilise l'ASCII)

	test3:
			Encore un petit test pour montrer l'importance du type d'affichage. 
			J'ai un float avec une certaine valeur dedans. Elle est codée en tant que float. Pour les curieux, elle suit la norme IEEE 754
			http://fr.wikipedia.org/wiki/IEEE_754
			un float fait 4 octets sur nos machines. Or un int fait également souvent 4 octets. Mais les données ne sont pas organisées pareil dedans.
			Donc si je mets un %d pour afficher un float, la machine va prendre les 4 octets du float et les "décoder" comme si c'était un int. 
			Donc on obtient une valeur fausse.
			Par contre, si je passe (int)f en deuxième paramètre, alors il y a conversion du float en int, et ainsi la valeur sera bonne.
			Notez le suffixe f à la fin de -35.264725f; qui permet de dire explicitement au compilateur que je donne un float. Ne rien mettre voudrait dire 
			que je donne un double.

	test4:
			L'affichage d'un float affiche par défaut 6 chiffres après la virgule. Mais cela peut être change comme vous pouvez le voir sur l'exemple.
			Notez que printf arrondit et ne tronque pas : ainsi, a 3 chiffres après la virgule, on affiche 1.152 (et non 1.151) car le chiffre d'après est un 9 :
			nous sommes donc mathématiquement plus près de 1.152 que de 1.151
			Notez qu'il ne sert à rien de mettre %.100f : vous aurez bien vos 100 chiffres, mais la précision d'un float (ou d'un double) n'étant pas assez bonne
			pour assurer autant de décimales, les chiffres en plus seront indéterminés. (ce sera soit des 0, soit n'importe quoi)
			La syntaxe %.*f veut dire qu'on donne la valeur en paramètre (ici i).
	test5:
			Quelques affichages, en hexa (avec majuscule ou minuscule pour les lettres), en octal, en notation scientifique (avec majuscule ou minuscule pour e)
			Ainsi que l'affichage des pointeurs.
	test6:
			Quelques caractères spéciaux avec la réponse, dans l'ordre, aux questions suivantes :
			- comment faire un son avec printf
			- comment afficher le caractère %  (il suffit d'en mettre deux)
			- comment afficher une \  (il suffit d'en mettre deux)
			- comment afficher des "
			- comment afficher des '
			- comment afficher directement un code ASCII quand on connait le code en hexa
			- comment revenir d'un cran en arrière (comme la touche backspace)