Wyswietlanie w kolorze

0

Argumenty z jakimi chciałbym wywoływać funkcje wyświetl to były by nazwy zmiennych w tej funkcji np, q00 i chciałbym żeby wtedy wartość tej zmiennej wyświetlała się na czerwono. Potrzebuję pomocy jak to zrobić najkrócej.
Napisałem kawałek kodu który na razie nie działa a ja nie wiem jak sie za to dalej zabrać.
Z góry dziękuje za wszelką pomoc.

char * kolor(char * symbol){
    char  tmp1[MAX_DL] = "\033[031m";
    char  tmp2[MAX_DL] = "\033[0m";

    strcat(tmp1, symbol);
    strcat(tmp1, tmp2);
    strcpy(symbol,tmp1);
    
    return *symbol;

}

void wyswietl(char * symbol){
    char  q00[MAX_DL] = (strcmp(symbol, "q00") == 0) ? kolor("0") : "0";
    char  q01[MAX_DL] = "1";
    char  q0[MAX_DL]  = "q0";
    char  q1[MAX_DL]  = "q1";
    char  q10[MAX_DL] = "0";
    char  q11[MAX_DL] = "1";
    char  q2[MAX_DL]  = "q2";
    char  q20[MAX_DL] = "0";
    char  q21[MAX_DL] = "1";
    char  q3[MAX_DL]  = "q3";
    char  q30[MAX_DL] = "0";
    char  q31[MAX_DL] = "1";


    printf( "\t------      %s      ------   \n", q01);
    printf( "\t|    |------------>|    |    \n");
    printf( "\t| %s |<------------| %s |    \n", q0, q1);
    printf( "\t|    |      %s      |    |   \n", q11);
    printf( "\t------             ------    \n");
    printf( "\t /\\|                /\\|    \n");
    printf( "\t  ||                 ||      \n");
    printf( "\t %s||%s               %s||%s \n", q20, q00, q31, q11);
    printf( "\t  ||                 ||      \n");
    printf( "\t  |\\/                |\\/   \n");
    printf( "\t------      %s      ------   \n", q21);
    printf( "\t|    |------------>|    |    \n");
    printf( "\t| %s |<------------| %s |    \n", q2, q3);
    printf( "\t|    |      %s      |    |   \n", q31);
    printf( "\t------             ------    \n");
}
1

Bez klas nie jest to łatwe zadanie.
Może zrób to nieco inaczej.

#include <stdio.h>
#define RED "<START_RED>"
#define BLUE "<START_BLUE>"
#define NONE "<END>"
#define with_kolor(kolor,text) kolor text NONE

int main(void)
  {
   char buf1[]=with_kolor(RED,"abc");
   char buf2[]=with_kolor(BLUE,"def");
   printf("%s\n",buf1);
   printf("%s\n",buf2);
   return 0;
  }
0
   char buf1[] = (strcmp(symbol,"q00") == 0) ? with_kolor(RED,"q00") : "q00";

Czemu taka inicjalizacja zmiennej jest błędna i jak ją poprawić ?

0
const char *buf1=strcmp(symbol,"q00")?"q00":with_kolor(RED,"q00");

Z tym że na 100% coś przekombinowałeś.
Może wyjaśnisz co chcesz zrobić?
Zastanów się nad czymś takim:

#include <string.h>
#include <stdio.h>

void show(const char scheme[],char red[],char green[])
  {
   for(int i=0;scheme[i];++i)
     {
      if(strchr(green,scheme[i])) printf("<G>%c<<G>",scheme[i]);
      else if(strchr(red,scheme[i])) printf("<R>%c<<R>",scheme[i]);
      else putchar(scheme[i]);
     }
  }

int main()
  {
   const char scheme[]
	 =
	  "\t------- A ---- C ---\n"\
	  "\t---A ----- B -------\n"\
	  "\t------ C -- B ------\n"
	 ;
   show(scheme,"AC","B");
   return 0;
  }
0

Wydaje mi się że nie mogę użyć twojego przykładu w tym przypadku.
Ogólnie to muszę zrobić automat skończony i wizualnie pokazać jego przebieg. Chciałem za każdym wywołaniem funkcji wyświetl czyścic konsole i kolorować odpowiednie zmienne i teraz funkcja działa tak jak oczekiwałem. Jeśli masz jakiś lepszy pomysł jak to zrobić to chętnie posłucham :)

#define RED "\033[031m"
#define NONE "\033[0m"
#define kolor(text) RED text NONE


void wyswietl(char * symbol){
    char * q0  = strcmp(symbol, "q0")   ? "q0"	: kolor("q0");
    char * q00 = strcmp(symbol, "q00")  ? "0"  	: kolor("0");
    char * q01 = strcmp(symbol, "q01")  ? "1"	: kolor("1");
    char * q1  = strcmp(symbol, "q1")   ? "q1"	: kolor("q1");
    char * q10 = strcmp(symbol, "q10")  ? "0"	: kolor("0");
    char * q11 = strcmp(symbol, "q11")  ? "1"	: kolor("1");
    char * q2  = strcmp(symbol, "q2")   ? "q2" 	: kolor("q2");
    char * q20 = strcmp(symbol, "q20")  ? "0"	: kolor("0");
    char * q21 = strcmp(symbol, "q21")  ? "1"	: kolor("1");
    char * q3  = strcmp(symbol, "q3")   ? "q3"	: kolor("q3");
    char * q30 = strcmp(symbol, "q30")  ? "0"	: kolor("0");
    char * q31 = strcmp(symbol, "q31")  ? "1"	: kolor("1");
    
    system("clear");

    printf( "\t------      %s      ------   \n", q01);
    printf( "\t|    |------------>|    |    \n");
    printf( "\t| %s |<------------| %s |    \n", q0, q1);
    printf( "\t|    |      %s      |    |   \n", q11);
    printf( "\t------             ------    \n");
    printf( "\t /\\|                /\\|    \n");
    printf( "\t  ||                 ||      \n");
    printf( "\t %s||%s               %s||%s \n", q20, q00, q30, q10);
    printf( "\t  ||                 ||      \n");
    printf( "\t  |\\/                |\\/   \n");
    printf( "\t------      %s      ------   \n", q21);
    printf( "\t|    |------------>|    |    \n");
    printf( "\t| %s |<------------| %s |    \n", q2, q3);
    printf( "\t|    |      %s      |    |   \n", q31);
    printf( "\t------             ------    \n");
}
0

Oczywiście że możesz, poza tym skoro używasz takiego kolorowania to czemu nie użyjesz "\033[2J" do czyszczenia ekranu.
http://ideone.com/sz3YGR

1 użytkowników online, w tym zalogowanych: 0, gości: 1