IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Printf et couleur


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Printf et couleur
    Bonjour à tous,

    Je débute en C et j'ai quelques soucis de mise en oeuvre de la fonction "printf".
    J'aimerai pouvoir imprimer du texte en couleur ainsi que de modifier la couleur de l'arrière plan.
    Configuration : Je fais mon apprentissage en mode texte et mode console (peut être un vieux souvenir de dos )

    "C" dur dur - pour mes vieux neurones.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonjour,

    Le C étant principalement conçu pour construire des binaires autonomes fonctionnant sur des plate-formes très diverses, la gestion de la couleur du texte ne fait pas partie de la bibliothèque standard car elle est très dépendante de l'environnement que tu utilises. Ceci pour dire que, contrairement à d'autres langages comme BASIC dans lequel il existait une instruction COLOR dédiée que l'on voyait généralement juste après le PRINT "BONJOUR", modifier la couleur de la console en C n'est pas forcément ce qu'il y a de plus facile et, donc, pas forcément le meilleur exercice pour débuter.

    Si tu es sous Windows, tu peux utiliser SetConsoleTextAttribute(). Si tu es sous Unix, tu peux utiliser ncurse, ou pdcurse sous DOS.

    Enfin, si tu ne comptes pas utiliser de bibliothèque externe dans un premier temps, tu peux envoyer les codes de contrôles idoines à ta console qui les interprétera correctement. Si ta console gère les codes DEC CSI standardisés ANSI, il faut envoyer par exemple :

    … changer de mode.

    Essaie par exemple :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
        printf ("\033[34;01mBonjour\033[00m\n");

    … en remplaçant « 34 » par les nombres de 31 à 37. Ça a l'air tordu mais, comme on l'a dit, c'est complètement indépendant du langage C. N'importe quel programme écrit dans n'importe quel langage peut émettre ces codes sur la sortie standard et obtenir le même résultat.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci Obsidian

    J'ai essayé la combinaison que tu proposes et cela correspond à mes attentes pour l'instant.
    Où peut-on trouver les différentes combinaisons de codes qui entre dans printf (pour les caractères et le fond) ?
    Merci pour ton aide
    Rq: Je suis sous linux ubuntu 10_10

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Il y a un bit par couleur primaire, ce qui donne :

    1 Rouge
    2 Vert
    4 Bleu

    Et donc, quand on les additionne : Noir, Rouge, Vert, Jaune, Bleu, Magenta, Cyan, Blanc. Le code « 01 » (séparé du premier par le point-virgule) sert à activer la surbrillances (essaie d'enlever « ;01 » pour voir).

    À noter que ce sont des séquences qui ont été inventées pour piloter un terminal à distance, et que tu peux faire bien d'autres choses :

    http://en.wikipedia.org/wiki/ANSI_escape_code

    Il est utile de remarquer, également, que bon nombres de terminaux fonctionnent sur le même principe sans pour autant suivre le même standard. Le minitel, par exemple, est un terminal utilisant le Vidéotex plutôt que les codes ANSI.

    Notons enfin que la séquence « 0 » (à ne pas confondre avec 30) sert à réinitaliser les attributs. Ça vire donc la couleur pour remettre celle par défaut, mais également la subrillance éventuelle et le souligné quand il est disponible.

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juillet 2009
    Messages : 122
    Points : 306
    Points
    306
    Par défaut
    Bonjour,

    juste pour info, voici un code que j'avais trouvé je ne sais plus où sur internet (peut-être même sur ce forum... désolé de ne pas pouvoir citer l'auteur) lorsque je me demandais comment mettre des couleurs dans le terminal. Il donne une grande gamme de couleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include  <stdio.h>
    #include  <stdlib.h>
     
    int main(void)
    {
     int color;
     int green, red, blue;
     
     /* 0 - 15 */
     puts("System colors:");
     for(color = 0; color<8; color++)
     {
       printf("\x1B[48;5;%dm  ", color);
     }
     puts("\x1B[0m");
     for(color = 8; color<16; color++)
     {
       printf("\x1B[48;5;%dm  ", color);
     }
     puts("\x1B[0m\n");
     
     /* 16 - 231 */
     puts("Color cube, 6x6x6:");
     for(red = 0; red<6; red++)
     {
       for(green = 0; green<6; green++)
       {
         for(blue = 0; blue<6; blue++)
         {
           color = 16 + (red * 36) + (green * 6) + blue;
           printf("\x1B[48;5;%dm  ", color);
         }
         printf("\x1B[0m ");
       }
       puts("");
     }
     
     /* 232 - 255 */
     puts("Grayscale ramp:");
     for (color = 232; color < 256; color++)
     {
       printf("\x1B[48;5;%dm  ", color);
     }
     puts("\x1B[0m");
     
       return 0;
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci Meseira

    Avec ce bout de code, on a tout ce que l'on souhaite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Comment mettre des couleurs a printf ( )
    Par damien42 dans le forum C
    Réponses: 27
    Dernier message: 31/03/2005, 23h10
  3. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  4. Mixage de Couleurs
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 29/05/2002, 13h34
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo