在控制台c#上替换字符颜色

本文关键字:字符 颜色 替换 控制台 | 更新日期: 2023-09-27 18:11:09

我正在尝试将一些c#字符从蓝色替换为白色。这里有一个if语句来检查这个数是奇数还是偶数。这似乎不起作用。

static void Main(string[] args)
{
    // Ask for minutes.
    //Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("Minutes?");
    string minutes = Console.ReadLine();
    int mins = int.Parse(minutes);
    for (int i = 0; i < mins; i++)
    {
        // Sixty seconds is one minute.
        System.Threading.Thread.Sleep(1000 * 60);
        // Write line.
        if (i % 2 == 0)
        {
            //iseven
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine(new string('&', 30));
        }
        else
        {
            //is odd
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine(new string('*', 30));
        }
    }
    // Beep ten times.
    for (int i = 0; i < 10; i++)
    {
        Console.Beep(200,1000);
    }
    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("[Done]");
    Console.Read();
}

在控制台c#上替换字符颜色

两个语句似乎都将颜色设置为ConsoleColor.Blue。将其中一个更改为ConsoleColor.White:

if (i % 2 == 0)
{
     //iseven
     Console.ForegroundColor = ConsoleColor.Blue;
     Console.WriteLine(new string('&', 30));
}
else
{
    //is odd
    Console.ForegroundColor = ConsoleColor.White; //<--- here.
    Console.WriteLine(new string('*', 30));
}

我已经审查了您的主要功能,似乎您的问题是您总是将前景色设置为蓝色。

if (i % 2 == 0)
                {
                    //iseven
                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.WriteLine(new string('&', 30));
                }
                else
                {
                    //is odd
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine(new string('*', 30));
                }

只要改变else子句中的第一个语句就可以达到你想要的效果。

正常运行

Console.WriteLine("Minutes?");
string minutes = Console.ReadLine();
int mins = int.Parse(minutes);
for (int i = 0; i < mins; i++)
{
    // Sixty seconds is one minute.
    System.Threading.Thread.Sleep(1000 * 1);
    // Write line.
    if (i % 2 == 0)
    {
        //iseven
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine(new string('&', 30));
    }
    else
    {
        //is odd
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine(new string('*', 30));
    }
}
// Beep ten times.
for (int i = 0; i < 10; i++)
{
    Console.Beep(200, 1000);
}
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("[Done]");
Console.Read();

Dave Zych的答案是正确的,我想我应该展示另一种方法。

for (int i = 0; i < 10; i++)
{
    // Removed sleep and other calls.
    Console.ForegroundColor = i % 2 == 0 ? ConsoleColor.Blue : ConsoleColor.White;
    Console.WriteLine(new string(i % 2 == 0 ? '&': '*', 30));
}

免费奖励方法:

ConsoleColor[] colors = new ConsoleColor[] { ConsoleColor.Blue, ConsoleColor.White };
char[] messageChars = new char[] { '&', '*' };
for (int i = 0; i < 10; i++)
{
    Console.ForegroundColor = colors[i % 2];
    Console.WriteLine(new String(messageChars[i % 2], 30));
}

或者,如果你想要真正的疯狂:

Func<int, ConsoleColor> color = i => i % 2 == 0 ? ConsoleColor.Blue : ConsoleColor.White;
Func<int, string> message = i => new String(i % 2 == 0 ? '&' : '*', 30);
for (int i = 0; i < 10; i++)
{
    Console.ForegroundColor = color(i);
    Console.WriteLine(message(i));
}

Dave和theB也说对了。但是你正在寻找这个答案,你正在尝试输入分钟= 1,结果你想要的前景颜色为白色,你提到到上面的评论:

static void Main(string[] args)
{
   // Ask for minutes.
  //Console.ForegroundColor = ConsoleColor.White;
  Console.WriteLine("Minutes?");
  string minutes = Console.ReadLine();
  int mins = int.Parse(minutes);
  //for (int i = 0; i < mins; i++)
  for (int i = 1; i <= mins; i++)
  {
     // Sixty seconds is one minute.
     System.Threading.Thread.Sleep(1000 * 60);
     // Write line.
     if (i % 2 == 0)
     {
        //iseven
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine(new string('&', 30));
     }
     else
     {
        //is odd
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine(new string('*', 30));
     }
  }
  // Beep ten times.
  for (int i = 0; i < 10; i++)
  {
     Console.Beep(200, 1000);
  }
  Console.ForegroundColor = ConsoleColor.White;
  Console.WriteLine("[Done]");
  Console.Read();
}

所以你需要更新你的第一个"for"语句:For (int I = 1;I <= min;我+ +)

和ELSE语句:控制台。

就是这样。您需要更新代码。您的代码将按照预期的结果工作。