Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查用户是否正确输入了命令-C#_C#_Console Application - Fatal编程技术网

如何检查用户是否正确输入了命令-C#

如何检查用户是否正确输入了命令-C#,c#,console-application,C#,Console Application,我正在C#的一个控制台应用程序中开发一个冒险型文本游戏 我需要一个方法来测试用户是否正确地输入了命令,以及他们是否没有再次测试 我现在正在尝试: do { Response = Console.ReadLine(); switch (Response.ToLower()) { case "hallway": Location = Locations[2]; Console.WriteLine("You dec

我正在C#的一个控制台应用程序中开发一个冒险型文本游戏

我需要一个方法来测试用户是否正确地输入了命令,以及他们是否没有再次测试

我现在正在尝试:

do
{
    Response = Console.ReadLine();
    switch (Response.ToLower())
    {
        case "hallway":
            Location = Locations[2];
            Console.WriteLine("You decide to get some fresh air, and step out of the dance room and into the hallway." + "\n" + "There's no one here.");
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Command List: Look, Look at, Move, Check Status");
            Console.ResetColor();
            ResponseTester();
            break;
        case "dance room":
            //[Other code here]
            break;
        default:
            Console.WriteLine("I'm sorry, I don't understand that.");
            break;
    }
}
while (Response.ToLower() != "hallway" || Response.ToLower() != "dance room");

但是它不是很可靠,因为当我尝试使用if/else语句或其他用法时,它只会测试一次。有更好的测试方法吗

您需要将其重写如下

var invalid = true;
while (invalid )
{
  Response = Console.ReadLine();
  switch (Response.ToLower())
    {
      case "hallway":
      Location = Locations[2];
      Console.WriteLine("You decide to get some fresh air, and step out of the dance room and into the hallway." + "\n" + "There's no one here.");
      Console.ForegroundColor = ConsoleColor.Cyan;
      Console.WriteLine("Command List: Look, Look at, Move, Check Status");
      Console.ResetColor();
      ResponseTester();
      invalid = false;
      break;
    case "dance room":
      //[Other code here]
      invalid = false;
      break;
    default:
      Console.WriteLine("I'm sorry, I don't understand that.");
      break;
    }
  }
但除此之外,真正获取输入需要与处理游戏设计输入分开。设置一个可接受单词的数组或列表,并对其进行测试,然后分别进行处理

就这样

private List<string> validWords = new List<string>{"hallway","dance room"};

private string GetInput()
{
  var response = string.Empty;
  while (true)
    {
      response = Console.ReadLine();
      if (validWords.Contains(response))
        {
          break;
        }
    }
    return response;
}

private void ProcessInput(string response)
{
   //switch statements go here
}
private List validWords=新列表{“走廊”、“舞厅”};
私有字符串GetInput()
{
var response=string.Empty;
while(true)
{
response=Console.ReadLine();
if(有效字数.包含(响应))
{
打破
}
}
返回响应;
}
私有void ProcessInput(字符串响应)
{
//开关语句在这里
}

您需要将其重写如下

var invalid = true;
while (invalid )
{
  Response = Console.ReadLine();
  switch (Response.ToLower())
    {
      case "hallway":
      Location = Locations[2];
      Console.WriteLine("You decide to get some fresh air, and step out of the dance room and into the hallway." + "\n" + "There's no one here.");
      Console.ForegroundColor = ConsoleColor.Cyan;
      Console.WriteLine("Command List: Look, Look at, Move, Check Status");
      Console.ResetColor();
      ResponseTester();
      invalid = false;
      break;
    case "dance room":
      //[Other code here]
      invalid = false;
      break;
    default:
      Console.WriteLine("I'm sorry, I don't understand that.");
      break;
    }
  }
但除此之外,真正获取输入需要与处理游戏设计输入分开。设置一个可接受单词的数组或列表,并对其进行测试,然后分别进行处理

就这样

private List<string> validWords = new List<string>{"hallway","dance room"};

private string GetInput()
{
  var response = string.Empty;
  while (true)
    {
      response = Console.ReadLine();
      if (validWords.Contains(response))
        {
          break;
        }
    }
    return response;
}

private void ProcessInput(string response)
{
   //switch statements go here
}
private List validWords=新列表{“走廊”、“舞厅”};
私有字符串GetInput()
{
var response=string.Empty;
while(true)
{
response=Console.ReadLine();
if(有效字数.包含(响应))
{
打破
}
}
返回响应;
}
私有void ProcessInput(字符串响应)
{
//开关语句在这里
}

您可以让用户输入和语法检查位于无限循环
中,而(true){…}
中。否则,“它只会测试一次”的问题就不清楚了。@Sintar如果用户输入不正确,它就不会重置循环以便他们可以正确输入,这就是我的意思。例如,如果我输入move,然后没有正确拼写“hallway”,它不会重试,只会输出它不理解的内容。您可以让用户输入和语法检查位于无限循环
中,而(true){…}
中。否则,“它只会测试一次”的问题就不清楚了。@Sintar如果用户输入不正确,它就不会重置循环以便他们可以正确输入,这就是我的意思。比如,如果我输入move,但没有正确拼写“hallway”,它不会再试一次,只会输出它不懂的内容。第二种方法实际上似乎效率更高。你能再解释一下这里发生了什么吗?我对C#还是有点陌生,我不确定我做得对吗?好吧,完全跳过它是什么语言,在任何一种编程中,你都希望分离关注点。所以接收输入和处理输入是分开的。基本上,您将拥有一个外部循环,该循环永久调用get input,然后在收到字符串后调用ProcessInput。get input检查输入的单词是否在有效单词列表中,并强制他们继续输入,直到输入正确的单词为止。这就是>while(true)的意义所在,因为它将不断重复,直到找到有效单词时遇到中断。实际上,第二种方法似乎效率更高。你能再解释一下这里发生了什么吗?我对C#还是有点陌生,我不确定我做得对吗?好吧,完全跳过它是什么语言,在任何一种编程中,你都希望分离关注点。所以接收输入和处理输入是分开的。基本上,您将拥有一个外部循环,该循环永久调用get input,然后在收到字符串后调用ProcessInput。get input检查输入的单词是否在有效单词列表中,并强制他们继续输入,直到输入正确的单词为止。这就是>while(true)的意义所在,它将不断重复,直到找到有效单词时遇到断点