2013-01-13 222 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

请记住然而,这是不可移植的,并不会在所有平台上工作。