我正在尝试制作一个简单的霰弹枪游戏,其中用户与 CPU 和两者都选择射击、屏蔽或重新加载,但在我的 GetOptionFromUser 中我不断收到错误“ShotgunGame.Program.GetOptionFromUser()”:并非所有代码路径返回一个值
任何指导将不胜感激 这是我的方法
enum ShotgunOption
{
Shoot = 1,
Reload = 2,
Shield = 3,
}
static void DisplayMenu()
{
Console.WriteLine("Please pick an item:");
Console.WriteLine("S - Shoot");
Console.WriteLine("P - Shield");
Console.WriteLine("R - Reload");
//Console.WriteLine("X - Exit");
}
static ShotgunOption GetOptionFromUser()
{
char menuItem;
DisplayMenu();
menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
if (menuItem == 'S')
{
return ShotgunOption.Shoot;
}
else if (menuItem == 'P')
{
return ShotgunOption.Shield;
}
else if (menuItem == 'R')
{
return ShotgunOption.Reload;
}
while (menuItem != 'S' && menuItem != 'P' && menuItem != 'R')
{
Console.WriteLine("Error - Invalid menu item");
DisplayMenu();
menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
}
}
static void DisplayResults(ShotgunOption UserOption,ShotgunOption CPUOption, int UserScore, int UserBullets, int CPUBullets)
{
Console.Clear();
Console.WriteLine("Giving up?");
Console.WriteLine("You Chose {0}, The Computer Chose{1} Your Score is {3} . You had {4} Bullet(s). The CPU had {5} bullets(s).", UserOption, CPUOption, UserScore, UserBullets, CPUBullets);
Console.WriteLine("Thanks for playing!");
Console.ReadKey();
}
最佳答案
您有一系列 if
else if
返回值。但是你有
while (menuItem != 'S' && menuItem != 'P' &&
menuItem != 'R')
...
没有返回语句。您需要在方法的末尾以及您的 if
中返回。
您尝试执行的操作与您的代码执行的操作有些不同。这样的事情会更好地为您服务:
static ShotgunOption GetOptionFromUser()
{
char menuItem = null;
DisplayMenu();
var menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
while (menuItem != 'S' && menuItem != 'P' && menuItem != 'R')
{
Console.WriteLine("Error - Invalid menu item");
DisplayMenu();
menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
}
if (menuItem == 'S')
{
return ShotgunOption.Shoot;
}
else if (menuItem == 'P')
{
return ShotgunOption.Shield;
}
return ShotgunOption.Reload;
}
这样,代码会循环直到它有一个有效值,然后在它离开循环后处理要返回的项目,确保通过代码的每条路径都返回一些东西。
关于c# - 并非所有代码路径都返回值 ' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031872/