La console en C

Fermé
youplalayoupi - 12 août 2009 à 19:23
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 13 août 2009 à 23:14
Bonjour,

j'ai installé code::blocks sous ubuntu et quand je lance un programme en console, j'aimerais pouvoir modifier les propriétés de celle-ci. Un peu comme sous celle de Windows où on peut changer les couleurs / taille de la police et surtout la taille de la mémoire tampom. Malheuresement je ne peux que agrandir/réduire/ect la fenêtre de la console sans pouvoir accerder a ses propriétés quand je suis sous linux avec code::blocks.

Voilà, donc toute aide est la bienvenue ! Merci !
A voir également:

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
12 août 2009 à 22:49
J'ai bien un début de solution, mais ça ne marchera que sur Linux (et encore, pas tous)

Il s'agit d'utiliser des instructions en langage bash, via l'appel de la fonction system
On peut faire ainsi quelques changements de style (mais très peu)

Pour changer la couleur (en rouge par exemple) c'est quelque chose comme ça en bash :
echo -en "\033 [31m"
En C maintenant, ça doit donner à peu près ça :
system("echo -en \"\\033 [31m\"");
Je n'ai pas vérifié, parce que j'ai pas Linux sous la main mais je l'ai déjà fait...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 août 2009 à 23:01
Salut,

Pour les couleurs en C : https://openclassrooms.com/fr/courses
Je te recommande plutôt la solution avec l'API.
Pour changer les propriétés comme la taille : https://docs.microsoft.com/en-us/windows/console/setconsolescreenbuffersize?redirectedfrom=MSDN

Cdlt
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
13 août 2009 à 22:42
J'ai retrouvé Ubuntu et j'ai fait une petite fonction qui peux aider pour la mise en forme du terminal.
Cependant je tiens à rappeler que ma méthode marche sous Ubuntu mais qu'elle pourrait ne pas fonctionner avec d'autres distributions Linux (et pour Windows on ira directement voir la réponse de fiddy)
#include <stdio.h>
#include <string.h>

void Style(char * commande)
{
	char part1[100]="echo -n \"\\033[";
	char part2[10]="m\"";

	strcat(part1,commande);
	strcat(part1,part2);

	system(part1);
}
Je n'ai pas trouvé de liste complète des commandes possibles, cependant voici celles que je connais :
Style("0"); // style par défaut
Style("1"); // en gras
Style("2"); // inactif
Style("4"); // souligner
Style("7"); // style du curseur
Style("8"); // style mot de passe (invisible)
Style("9"); // barré
Style("3N"); // couleur d'avant plan *
Style("4N"); // couleur d'arrière plan *

* N doit être remplacer par un chiffre
0 : noir
1 : rouge
2 : vert
3 : jaune
4 : bleu
5 : magenta
6 : cyan
7 : blanc
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
13 août 2009 à 22:48
Sinon pour linux, il y a aussi ce lien :
http://www.siteduzero.com/tutoriel-3-35298-des-couleurs-dans-la-console-linux.html ;-)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
13 août 2009 à 22:56
Salut fiddy !
En comparant ma méthode avec ton lien je me pose une question :
Est-ce qu'on peut toujours remplacer system(echo "..."); par printf("..."); ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024
13 août 2009 à 23:14
Est-ce qu'on peut toujours remplacer system(echo "..."); par printf("..."); ?
En terme de fonctionnalité oui. Mais c'est déconseillé pour deux raisons :
1/ C'est beaucoup plus gourmand en mémoire de par l'utilisation de la fonction system
2/ Tu perds largement en portabilité.

Par contre, avec le printf, faut faire attention à vider le buffer stdout soit de manière explicitement soit c'est fait automatiquement.

Cdlt
0