0

我正在尝试编写代码(在 Visual Studio 2012 中使用 c#),允许用户使用 1、2、3 或 4 选择帐户。我正在使用 do-while 循环,所以我可以使用 0 退出(中断? ) 或再次运行循环,直到选择了有效选项。

问题是,Visual Studio 告诉我代码validAccount = true;无法访问,并且不允许我对其进行测试。因为这个方法也应该返回一个值,所以我有一个“并非所有代码路径都返回一个值”错误,我真的很困惑。这是我的代码:

    static int chooseAccount() {
        bool validAccount = false;
        do {
            Console.Clear();
            Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
            int inputNumber = int.Parse(Console.ReadLine()); //by declaring int inputNumber here we save having an extra line.
            if ((inputNumber >= 1) && (inputNumber <= 4)) {
                return inputNumber;
                validAccount = true;
            }
            else if (inputNumber == 0) {
                break;
            }
            else {
                Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
            }
        } while (!validAccount);
    }//end chooseAccount

也许我只是盯着这个太久了,看不到我犯的简单错误。如果此类问题已经解决,我欢迎新的视角或方向来找到解决方案。(当代码必须如此具体时,很难用谷歌搜索“无法访问的代码”之类的东西......)

4

3 回答 3

1

带有错误的行紧跟在 return 语句之后。在每种情况下(编译器知道这一点),您的代码都会在其前一行退出函数,因此它永远不会到达下一行。

您不需要设置validAccounttrue来中断循环,因为该return语句将退出函数,因此会自动退出循环。

最后,如果您设置validAccount为 true 然后返回,则没有其他函数可以访问validAccount,那么您为什么需要费心将其设置为 true 呢?

事实上,您根本不需要validAccount,因为使用breakandreturn语句,您已经控制了进出循环的方式。这将起作用:

static int chooseAccount() {
    while(true) {
        Console.Clear();
        Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
        int inputNumber = int.Parse(Console.ReadLine());
        if ((inputNumber >= 0) && (inputNumber <= 4)) {
            return inputNumber;
        }
        else 
        {
            Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
        }
    }
}
于 2013-09-06T06:36:26.180 回答
0

切换这两个:

return inputNumber;
validAccount = true;
于 2013-09-06T06:35:59.787 回答
0

请注意,该return声明将立即将您带出该功能。那么下一个validAccount = true;永远不会被执行!

于 2013-09-06T06:36:21.037 回答