Colorer caractère par caractère dans un printf

Fermé
babou01250 Messages postés 1 Date d'inscription mercredi 29 mai 2019 Statut Membre Dernière intervention 29 mai 2019 - Modifié le 29 mai 2019 à 15:33
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 29 mai 2019 à 18:08
Bonjour , j'ai des printf assez long dans mon code et j'aimerai colorer qu'une partie de celui-ci et je ne trouve pas la méthode alors si quelqu'un sait comment faire j'aimerai beaucoup savoir.
PS: je suis sur windows et je code sur codeblocks
merci
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 29 mai 2019 à 18:47
Bonjour babou01250,

1.

La méthode pour "colorer" une partie d'une chaîne dépend du procédé que tu utilises pour "colorer", que tu n'indiques pas.

De façon générale, si le procédé ne permet pas de gérer une coloration partielle au sein d'une chaîne de caractères, la solution est simplement de découper ta chaîne en plusieurs.

2.

Sous Linux, et systèmes du type Unix (y compris macOS), les consoles sont normalement des émulateurs de terminaux compatibles avec les séquences de code d'échappement ANSI, et tu peux les utiliser pour "colorer" la sortie sur la console (entre autres usages possibles). C'est un moyen commode de contrôler la console fréquemment utilisé, y compris dans les scripts shell, et un exemple de moyen de "coloration". En l'occurrence, ce moyen permet effectivement de colorer des parties d'une chaîne.

Par exemple :

#include <stdio.h>

int main(void) {
    printf("Cette chaîne de caractères affiche du texte dans la couleur par défaut, et \033[31;107mLE TEXTE EN LETTRES CAPITALES\033[0m est affiché en rouge sur fond blanc, et \033[93;41mCET AUTRE TEXTE EN CAPITALES\033[0m est affiché en jaune sur fond rouge.\n");

    return 0;
}


3.

A partir de Windows 10, la console fournie par Microsoft permet de gérer les séquences d'échappement ANSI, mais elle ne le fait pas par défaut. Il faut soit faire une modification globale dans le registre pour le permettre, soit paramétrer la console où s'exécute l'application avec l'API Windows et
SetConsoleMode()
pour l'activer.

On en parle là :

https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling

Par exemple, sous Windows 10, pour avoir le même effet, le code ci-dessus devrait être adapté comme ceci pour rendre les couleurs dans le cadre de l'exécution de ce programme par cmd.exe :

#include <stdio.h>
#include <windows.h>

#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif

int main(void) {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD dwMode = 0;

    GetConsoleMode(hOut, &dwMode);
    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hOut, dwMode);

    printf("Cette chaîne de caractères affiche du texte dans la couleur par défaut, et \033[31;107mLE TEXTE EN LETTRES CAPITALES\033[0m est affiché en rouge sur fond blanc, et \033[93;41mCET AUTRE TEXTE EN CAPITALES\033[0m est affiché en jaune sur fond rouge.\n");

    /* pour éviter que la console ne se referme avant d'avoir vu les magnifiques couleurs */
    getchar();

    return 0;
}

Cela rend cela :



Toutes les infos expliquant les codes ANSI sont là :

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

Je ne pense pas que cela fonctionne sous d'autres versions antérieures à Windows 10, sur lesquelles le seul moyen de faire reconnaître ces séquences d'échappement serait d'installer et utiliser une autre console de commandes que cmd.exe, supportant les séquences de code d'échappement ANSI (comme celles mentionnées dans le post dont j'ai donné le lien ci-avant sur superuser.com).

Dal
1