Problème printf
anthony
-
anthony -
anthony -
Bonjour,
Alors voila un lien ou j'ai exactement le même problème :
https://openclassrooms.com/forum/sujet/printf-25075#r4703154
si quelqu'un pourrais me dire pourquoi %n ne marche pas avec printf
Alors voila un lien ou j'ai exactement le même problème :
https://openclassrooms.com/forum/sujet/printf-25075#r4703154
si quelqu'un pourrais me dire pourquoi %n ne marche pas avec printf
5 réponses
montre ton code
/* printf() */
#include <stdio.h>
#include <stdlib.h>
char *m1 = "Biniare";
char *m2 = "Decimal";
char *m3 = "Octal";
char *m4 = "Hexadecimal";
int main(void)
{
float d1 = 10000.123;
int n;
puts("affichage d'un nombre avec plusieur largeurs de champs");
printf("%5f\n", d1);
printf("%10f\n", d1);
printf("%15f\n", d1);
printf("%20f\n", d1);
printf("%25f\n", d1);
puts("Appuyez sur Entree pour continuer...");
getchar();
puts("\nOn utilise * pour obtenir la largeur de champs d'une variable de la liste des arguments.\n");
for(n = 5; n < 25; n+=5)
printf("%*f\n", n, d1);
puts("Appuyez sur Entree pour continuer ...");
getchar();
puts("\nAffichage en Octal, decimale, et hexadecimal.");
puts("On utilise # a gauche des sorties octales et hex avec 0 et 0X");
puts("On utilise - a gauche pour justifier chaque valeur dans son champ");
puts("On utilise d'abord le nom des colones.\n");
printf("%-15s%-15s%-15s\n", m2, m3, m4);
for(n = 1; n < 20; n++)
printf("%-15d%-#15o%-#15X\n", n, n, n);
puts("Appuyez sur Entree pour continuer ...");
getchar();
puts("\n\nOn utilise la commande de conversion %n pour compter");
puts("Les caracteres. \n");
printf("%s%s%s%s %n\n", m1, m2, m3, m4, &n);
printf("\n\nLe dernier printf() a afficher %d caracteres.\n", n);
exit(EXIT_SUCCESS);
}
le problème c'est ici
printf("%s%s%s%s %n\n", m1, m2, m3, m4, &n);
printf("\n\nLe dernier printf() a afficher %d caracteres.\n", n);
ici normalement la chaine vaut 3à caractères alors que quand je test le code n conserve la valeur de la boucle
chez moi, il affiche bien 31 caractères
On utilise la commande de conversion %n pour compter Les caracteres. BiniareDecimalOctalHexadecimal Le dernier printf() a afficher 31 caracteres.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
possible, je suis sur Ubuntu, regarde la doc. printf
as-tu essayé une autre variable que n ?
as-tu essayé une autre variable que n ?
voici le code en essayant une variable que n
et voici le résultat
/* printf() */
#include <stdio.h>
#include <stdlib.h>
char *m1 = "Biniare";
char *m2 = "Decimal";
char *m3 = "Octal";
char *m4 = "Hexadecimal";
int main(void)
{
float d1 = 10000.123;
int n, s;
puts("affichage d'un nombre avec plusieur largeurs de champs");
printf("%5f\n", d1);
printf("%10f\n", d1);
printf("%15f\n", d1);
printf("%20f\n", d1);
printf("%25f\n", d1);
puts("Appuyez sur Entree pour continuer...");
getchar();
puts("\nOn utilise * pour obtenir la largeur de champs d'une variable de la liste des arguments.\n");
for(n = 5; n < 25; n+=5)
printf("%*f\n", n, d1);
puts("Appuyez sur Entree pour continuer ...");
getchar();
puts("\nAffichage en Octal, decimale, et hexadecimal.");
puts("On utilise # a gauche des sorties octales et hex avec 0 et 0X");
puts("On utilise - a gauche pour justifier chaque valeur dans son champ");
puts("On utilise d'abord le nom des colones.\n");
printf("%-15s%-15s%-15s\n", m2, m3, m4);
for(n = 1; n < 20; n++)
printf("%-15d%-#15o%-#15X\n", n, n, n);
puts("Appuyez sur Entree pour continuer ...");
getchar();
puts("\n\nOn utilise la commande de conversion %n pour compter");
puts("Les caracteres. \n");
printf("%s%s%s%s %n\n", m1, m2, m3, m4, &s);
printf("\n\nLe dernier printf() a afficher %d caracteres.\n", s);
exit(EXIT_SUCCESS);
}
et voici le résultat
affichage d'un nombre avec plusieur largeurs de champs
10000.123047
10000.123047
10000.123047
10000.123047
10000.123047
Appuyez sur Entree pour continuer...
On utilise * pour obtenir la largeur de champs d'une variable de la liste des ar
guments.
10000.123047
10000.123047
10000.123047
10000.123047
Appuyez sur Entree pour continuer ...
Affichage en Octal, decimale, et hexadecimal.
On utilise # a gauche des sorties octales et hex avec 0 et 0X
On utilise - a gauche pour justifier chaque valeur dans son champ
On utilise d'abord le nom des colones.
Decimal Octal Hexadecimal
1 01 0X1
2 02 0X2
3 03 0X3
4 04 0X4
5 05 0X5
6 06 0X6
7 07 0X7
8 010 0X8
9 011 0X9
10 012 0XA
11 013 0XB
12 014 0XC
13 015 0XD
14 016 0XE
15 017 0XF
16 020 0X10
17 021 0X11
18 022 0X12
19 023 0X13
Appuyez sur Entree pour continuer ...
On utilise la commande de conversion %n pour compter
Les caracteres.
BiniareDecimalOctalHexadecimal
Le dernier printf() a afficher 4199774 caracteres.
Process returned 0 (0x0) execution time : 3.295 s
Press any key to continue.