Problème printf

Fermé
anthony - 26 févr. 2010 à 11:28
 anthony - 27 févr. 2010 à 20:33
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 295 Date d'inscription vendredi 8 mai 2009 Statut Membre Dernière intervention 28 mai 2011 8
26 févr. 2010 à 11:33
met un espace
0
un espace ou ??
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
26 févr. 2010 à 13:11
montre ton code
0
/* 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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
27 févr. 2010 à 08:26
et en utilisant une autre variable que n ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
27 févr. 2010 à 10:01
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
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
27 févr. 2010 à 16:03
possible, je suis sur Ubuntu, regarde la doc. printf
as-tu essayé une autre variable que n ?
0
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