2017-04-20 56 views
2

我想创建一个可以在使用C#的命令提示符下运行的mastermind游戏菜单。我遇到的问题是捕获菜单的用户输入。如果他们输入2,那么它应该显示他们输入了第二个数字,如果不是,那么它会说他们没有显示第二个数字。主谋游戏的主菜单

我遇到的问题是,它不会将用户输入转换为工作整数,并会提出说它不能显式地从System.ConsoleKeyInfo转换为int或字符串转换为int。

using System; 

namespace MasterMind 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Console.ForegroundColor = ConsoleColor.Green; 
      Console.WriteLine("    MasterMind's Main Menu"); 
      Console.WriteLine("     1: Play"); 
      Console.WriteLine("     2: Help"); 
      Console.WriteLine("     0: Exit"); 
      int userinput = Console.ReadKey(); 
      if (Nuserinput == 2); 
      { 
       Console.WriteLine("This is a number 2"); 
      } 
      else 
      { 
       Console.WriteLine("This is not a number 2"); 
      } 
     } 
    } 
} 
+4

'Console.ReadKey()'返回'ConsoleKeyInfo'不是'int'。 –

+0

Console.ReadKey()Doc:https://msdn.microsoft.com/en-us/library/471w8d85%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – JohnLBevan

+0

请在线阅读文档'Console.ReadKey()'。它不会做你的想法。 (这已被多次询问)。 – crashmstr

回答

0

更改

int userinput = Console.ReadKey(); 
if (Nuserinput == 2) 

要:

string userInput = Console.ReadKey().KeyChar.ToString(); 
if(input == "2") 

或隐蔽的字符串为int如在其他的答案。但为此,一个字符串正常工作。

3

Console.ReadKey()返回ConsoleKeyInfo,所以你需要做这样的事情:

ConsoleKeyInfo data = Console.ReadKey(); 
int num; 
if (int.TryParse(data.KeyChar.ToString(), out num) && num == 2) 
{ 
    Console.WriteLine("This is a number 2"); 
}else{ 
    Console.WriteLine("This is not a number 2"); 
} 
5

Console.ReadKey()returns a ConsoleKeyInfo object,这是不是一个int对象。你可以从一个char,例如:

var key = Console.ReadKey(); 
var keyChar = key.KeyChar; 

如果用户希望char值来表示一个整数,你可以将其转换为一个:

int keyInt = (int)Char.GetNumericValue(keyChar); 

除了其它错误检查你可能如果用户不是输入一个有效的整数,这将至少得到你正在寻找的整数值。