2013-01-13 169 views
0

我正在爲我的C++類製作日曆程序,我只是想知道是否有方法來更改程序中某些日期的顏色(例如,聖誕節,新年,週末,都將是不同的顏色),如果它是不可能的我能至少大膽或東西...在C++控制檯中更改特定字符的顏色

這裏是我的代碼

char *month_name[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 
char *month_underline[12] = {"-------", "--------", "-----", "-----", "---", "----", "----", "------", "---------", "-------", "--------", "--------"}; 
char *week_name[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; 
int days = 1; 
int days_max; 
int i, j, k; 

for(i = 0; i < 12; i++) 
{ 
    cout << "--------------------------------------------------------------------------------"; 

    cout << '\n' << month_name[i] << '\n'; 
    cout << month_underline[i] << "\n\n"; 

    for (j = 0; j < 7; j++) 
    { 
     cout << week_name[j] << "  "; 
    } 



    cout << "\n\n"; 

    if (i == 0 || i == 2 || i == 4 || i == 6 || i == 7 || i == 9 || i == 11) //i is the number of the month minus 1 (jan = 0, feb = 1, etc.) 
     days_max = 32; 
    else if (i == 3 || i == 5 || i == 8 || i == 10) 
     days_max = 31; 
    else if (i == 1) 
     days_max = 29; 

    for (days = 1; days < days_max; days++) 
    { 
     if (i == 0 || i == 9) 
     { 
      if (days == 1) 
      { 
       cout << "      "; 
       cout << setw(4) << days << "  "; 
      } 
      else if (days == 6 || days == 13 || days == 20 || days == 27) 
      {  
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 


     if (i == 1 || i == 2 || i == 10) 
     { 
      if (days == 1) 
      { 
       cout << "               "; 
       cout << setw(4) << days << "  "; 
      }     
      else if (days == 3 || days == 10 || days == 17 || days == 24 || days == 31) 
      { 
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 

     if (i == 3 || i == 6) 
     { 
      if (days == 1) 
      { 
       cout << "   "; 
       cout << setw(4) << days << "  "; 
      }     
      else if (days == 7 || days == 14 || days == 21 || days == 28) 
      { 
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 

     if (i == 4) 
     { 
      if (days == 1) 
      { 
       cout << "         "; 
       cout << setw(4) << days << "  "; 
      }     
      else if (days == 5 || days == 12 || days == 19 || days == 26) 
      { 
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 

     if (i == 5) 
     { 
      if (days == 1) 
      { 
       cout << "                  "; 
       cout << setw(4) << days << "  "; 
      }     
      else if (days == 2 || days == 9 || days == 16 || days == 23 || days == 30) 
      { 
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 

     if (i == 7) 
     { 
      if (days == 1) 
      { 
       cout << "            "; 
       cout << setw(4) << days << "  "; 
      }     
      else if (days == 4 || days == 11 || days == 18 || days == 25) 
      { 
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 

     if (i == 8 || i == 11) 
     {   
      if (days == 8 || days == 15 || days == 22 || days == 29) 
      { 
       cout << "\n\n"; 
       cout << setw(4) << days << "  "; 
      } 
      else 
       cout << setw(4) << days << "  "; 
     } 


    } 
     cout << "\n"; 
} 

cout << "--------------------------------------------------------------------------------"; 


system("PAUSE"); 
return EXIT_SUCCESS; 
} 
+0

哪個操作系統?在Windows中,'SetConsoleTextAttribute'。 – chris

+0

系統(「PAUSE」)看起來像一個奇怪的方式來暫停程序... – johannes

回答

4

在你有一定的侷限性做文本模式。但是有一些便攜式庫可以處理你的目的,比如着色。

閱讀該問題:Portable text based console manipulator並按照link。這至少是(Windows和ANSI-逃生支持的操作系統)之間移植

你可以改變顏色像下面的代碼:

#include <iostream> 
#include "rlutil.h" // <-- Get it from the link 
int main() 
{ 
    rlutil::setColor(2); // 2 for Green 

    std::cout << "Hello! I am green!" << std::endl; 

    return 0; 
} 
+0

謝謝! :)這有助於很多! –

0

沒有C++「標準」的方式來做到這一點。您可以按照Masoud的建議找到一個庫,這將允許您的代碼可以移植到其他系統。或者您可以直接使用ANSI Escape序列[這可能是便攜式解決方案在幕後執行的操作,但還有其他方法]。

本頁面給出了一些信息: http://en.wikipedia.org/wiki/ANSI_escape_code

請記住然而,這是不可移植的,並不會在所有平臺上工作。