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
Configuration: Windows 7 / Firefox 3.5.8

5 réponses

  1. fofo73 Messages postés 387 Statut Membre 8
     
    met un espace
    0
    1. anthony
       
      un espace ou ??
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    montre ton code
    0
    1. 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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et en utilisant une autre variable que n ?
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    possible, je suis sur Ubuntu, regarde la doc. printf
    as-tu essayé une autre variable que n ?
    0
    1. 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