【问题标题】:C# Console app, Can't keep program running in while loop [closed]C#控制台应用程序,不能让程序在while循环中运行[关闭]
【发布时间】:2016-05-01 20:22:35
【问题描述】:

当用户按下某些键时,我试图更改控制台颜色,但我在 while 循环中做错了。尝试休息并返回,但两者都不适合我。我对编码还是很陌生。

    static void Main(string[] args)
    {

        while (true )
        {Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
            Console.ReadLine();

            if (Console.ReadKey(true).Key == ConsoleKey.R)
            {
                Console.BackgroundColor = ConsoleColor.Red;
                Console.ForegroundColor = ConsoleColor.Black;
                Console.Clear();
                //Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
               break;
            }

            else if (Console.ReadKey(true).Key == ConsoleKey.G)
            {
                Console.BackgroundColor = ConsoleColor.Green;
                Console.ForegroundColor = ConsoleColor.Black;
                Console.Clear();
                Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
                //break;
            }

            else if (Console.ReadKey(true).Key == ConsoleKey.B)
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Clear();
               Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
                //return;
            }

            else if (Console.ReadKey(true).Key == ConsoleKey.D)
            {
                Console.BackgroundColor = ConsoleColor.DarkGreen;
                Console.ForegroundColor = ConsoleColor.White;
                Console.Clear();
                Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
              // break;
            }

            else if (Console.ReadKey(true).Key == ConsoleKey.C)
            {
                Console.BackgroundColor = ConsoleColor.Cyan;
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.Clear();
               Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
               // break;
            }

            else if (Console.ReadKey(true).Key == ConsoleKey.M)
            {
                Console.BackgroundColor = ConsoleColor.Magenta;
                Console.ForegroundColor = ConsoleColor.Black;
                Console.Clear();
                Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
              //  break;
            }

            else {
                Console.WriteLine("You didn't press Key R,G,B,D,C,M.");
              //Console.ReadLine();
               // return;
            }
         // Console.ReadLine(); 

        }      
    }
}

}

【问题讨论】:

  • 预期的行为是什么?
  • 定义“不起作用”。它做什么?你期待它做什么?
  • 您在每次迭代中都在执行 readline。您确定您没有为该 readline 输入密钥吗?
  • 如果您希望在输入密钥后运行此循环,那么您必须使用continue 而不是returnbreak,因为那些关键字将离开循环。另一方面,continue 将开始新的迭代。
  • +1 to kostbone...这显然是一个家庭作业问题,他给出的答案刚好够让 Vishal 走上正轨,让他解决剩下的问题。

标签: c# if-statement while-loop console-application


【解决方案1】:

根据你想要的实现

当用户按下某些键时更改控制台颜色

Console.ReadLine 每次迭代都是多余的。

R 键退出while 循环也是意外行为。

试试下面的代码。

static void Main(string[] args)
{

  while (true)
  {
    Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color. Press E to Exit");
    switch (Console.ReadKey(true).Key)
    {
      case ConsoleKey.R:
        Console.BackgroundColor = ConsoleColor.Red;
        Console.ForegroundColor = ConsoleColor.Black;
        Console.Clear();
        break;
      case ConsoleKey.G:
        Console.BackgroundColor = ConsoleColor.Green;
        Console.ForegroundColor = ConsoleColor.Black;
        Console.Clear();
        break;
      case ConsoleKey.B:
        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Clear();
        break;
      case ConsoleKey.D:
        Console.BackgroundColor = ConsoleColor.DarkGreen;
        Console.ForegroundColor = ConsoleColor.White;
        Console.Clear();
        break;

      case ConsoleKey.C:
        Console.BackgroundColor = ConsoleColor.Cyan;
        Console.ForegroundColor = ConsoleColor.DarkRed;
        Console.Clear();
        break;
      case ConsoleKey.M:
        Console.BackgroundColor = ConsoleColor.Magenta;
        Console.ForegroundColor = ConsoleColor.Black;
        Console.Clear();
        break;
      case ConsoleKey.E:
        return;
      default:
        Console.WriteLine("You didn't press Key R,G,B,D,C,M.");
        break;
    }
    Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");
  }
}

【讨论】:

  • 感谢@tchelidze 你的代码也得到了我想要得到的东西。
  • @VishalBarot 很高兴得到帮助。
【解决方案2】:

您的代码不起作用,因为:您首先希望用户输入一行,然后输入一个键。

第二:如果用户按下 r,while 循环就会中断。

您应该在开始检查用户输入之前阅读该键,因为在每个if 上,您都希望有一个新的按键。

   while(true)
            {
                Console.WriteLine("Press Key R,G,B,D,C,M to change Console Color");

                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.R)
                {
                    Console.BackgroundColor = ConsoleColor.Red;
                    Console.ForegroundColor = ConsoleColor.Black;
                    Console.Clear();
                }

                else if (key.Key == ConsoleKey.G)
                {
                    Console.BackgroundColor = ConsoleColor.Green;
                    Console.ForegroundColor = ConsoleColor.Black;
                    Console.Clear();
                }

                else if (key.Key == ConsoleKey.B)
                {
                    Console.BackgroundColor = ConsoleColor.Blue;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Clear();
                }

                else if (key.Key == ConsoleKey.D)
                {
                    Console.BackgroundColor = ConsoleColor.DarkGreen;
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Clear();
                }

                else if (key.Key == ConsoleKey.C)
                {
                    Console.BackgroundColor = ConsoleColor.Cyan;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.Clear();
                }

                else if (key.Key == ConsoleKey.M)
                {
                    Console.BackgroundColor = ConsoleColor.Magenta;
                    Console.ForegroundColor = ConsoleColor.Black;
                    Console.Clear();
                }

                else
                {
                    Console.WriteLine("You didn't press Key R,G,B,D,C,M.");
                }

            };

【讨论】:

  • @Zippy 的代码有效,我试图通过按键更改控制台颜色并保持循环,因此它不会退出应用程序。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
相关资源
最近更新 更多