Problème printf

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

5 réponses

fofo73 Messages postés 387 Statut Membre 8
 
met un espace
0
anthony
 
un espace ou ??
0
dubcek Messages postés 19031 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
montre ton code
0
anthony
 
/* 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
0
dubcek Messages postés 19031 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
et en utilisant une autre variable que n ?
0
dubcek Messages postés 19031 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
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.
0
anthony
 
oui est bien c'est bien sa le problème, sur mon PC, %n ne marche pas .
Peut être c'est du a mon compilateur ??
Moi j'utilise codeBlock 8.02
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 19031 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
possible, je suis sur Ubuntu, regarde la doc. printf
as-tu essayé une autre variable que n ?
0
anthony
 
voici le code en essayant une variable que n
/* 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.
0