簡體   English   中英

並非所有代碼路徑都返回值''

[英]not all code paths return a value ' '

我正在嘗試制作一個簡單的shot彈槍游戲,在該游戲中,用戶與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;
}

這樣,代碼將循環直到其具有有效值為止,然后在退出循環后處理要返回的項目,從而確保代碼中的每個路徑都返回了某些內容。

在您的GetOptionFromUser函數中,在if/else if/else if結構之后,沒有return語句。 程序退出該結構並進入while循環后,就無法從函數返回,這是無效行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM