【问题标题】:while loop not working?while循环不起作用?
【发布时间】:2011-10-19 16:19:04
【问题描述】:

有人能找出这个循环不起作用的原因吗?我是 C# 新手。

while (move == "r" || move == "s" || move == "f")
            {
                Console.Write("\nEnter your move: ");
                move = Console.ReadLine();


                switch (move)
                {
                    case "r":
                        Console.Write("\nYou have reloaded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "s":
                        Console.Write("\nYou have shielded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "f":
                        Console.Write("\nYou have fired, press enter for Genius");
                        Console.ReadLine();
                        break;
                    default:
                        Console.Write("\nInvalid move, try again\n\n");
                        break;
                }


            }

【问题讨论】:

  • “不工作”是什么意思?它不进入循环?它不会停止吗?它过早退出?您是否尝试过调试并查看 move 的实际值是多少?
  • 它不会循环,但 Rasel 的回答效果很好

标签: c# while-loop switch-statement


【解决方案1】:

可能是因为 move 是在循环内初始化的,并且可能是 null 或空字符串,因为我在循环之前看不到代码,我假设它没有初始化。

我的建议是使用这样设置的布尔标志

bool done = false;
while (!done)
{
    // do work
    if (move == finalMove) // or whatever your finish condition is
        done = true; // you could also put this as a case inside your switch
}

【讨论】:

  • 不仅 move 可能没有被初始化,而且假设它是;如果用户输入不同于 r、s 或 f 的内容,while 循环也将结束。如果您想保持循环,请通过将 move 设置为您在条件中期望的值之一来处理默认情况。
  • 我认为这可能是一些逻辑,因为如果这个人输入了一个无效的动作,他可能希望它停止而不是报告错误。
  • 如果这是故意的,为什么他会显示:“无效的举动,再试一次”而不是“哦,你是个白痴,再见!”?他应该添加一个“q”选项并在“q”或类似的东西上退出循环。
  • 对不起,我弄乱了我的代码,在无效的移动上我真的想循环继续,我的意思是 == !=
【解决方案2】:

耶稣是对的,建议你接受他的回答。以下是如何重写代码。

do
            {
                Console.Write("\nEnter your move: ");
                move = Console.ReadLine();


                switch (move)
                {
                    case "r":
                        Console.Write("\nYou have reloaded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "s":
                        Console.Write("\nYou have shielded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "f":
                        Console.Write("\nYou have fired, press enter for Genius");
                        Console.ReadLine();
                        break;
                    default:
                        Console.Write("\nInvalid move, try again\n\n");
                        break;
                }


            }
 while (move == "r" || move == "s" || move == "f");

但是请注意,如果您得到除“r”、“s”或“f”之外的其他内容,您将打印Invalid move, try again,然后退出您的循环(他们不能再试一次)。您可能想要分配一个确实终止循环并将您的while 条件更改为类似

的键(可能是“q”表示退出)
while (move != "q");

【讨论】:

  • 哦,我的意思是相反的,所以无效的移动会启动循环。我将 == 更改为 !=,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2015-03-09
  • 2023-03-22
  • 1970-01-01
  • 2022-12-12
  • 2020-03-30
相关资源
最近更新 更多