Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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# visual studio c do while循环中无法访问的代码_C#_Visual Studio 2012_Do While - Fatal编程技术网

C# visual studio c do while循环中无法访问的代码

C# visual studio c do while循环中无法访问的代码,c#,visual-studio-2012,do-while,C#,Visual Studio 2012,Do While,我试图在visual studio 2012中使用c编写代码,允许用户使用1、2、3或4选择帐户。我正在使用do while循环,以便可以使用0退出break?或者再次运行循环,直到选择有效选项 问题是,VisualStudio告诉我代码validAccount=true;无法访问,不让我测试它。因为这个方法也应该返回一个值,所以我有一个错误,不是所有的代码路径都返回一个值错误,我真的很困惑。这是我的密码: static int chooseAccount() { boo

我试图在visual studio 2012中使用c编写代码,允许用户使用1、2、3或4选择帐户。我正在使用do while循环,以便可以使用0退出break?或者再次运行循环,直到选择有效选项

问题是,VisualStudio告诉我代码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
也许我只是盯着这个看太久了,看不出我犯了什么简单的错误。如果这类问题已经解决,我欢迎从新的角度或方向找到解决方案。当代码必须非常具体时,谷歌很难搜索到诸如无法访问的代码之类的东西…

切换这两种:

return inputNumber;
validAccount = true;

请注意,return语句会立即将您带出函数。然后下一个validAccount=true;永远不会被处决

带有错误的行正好位于return语句之后。在任何情况下,如果编译器知道这一点,代码都会在函数的前一行退出函数,因此它永远不会到达下一行

您不需要将validAccount设置为true来中断循环,因为return语句将退出函数,从而自动退出循环

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

事实上,您根本不需要validAccount,因为通过break和return语句,您已经可以控制循环的进出。这将有助于:

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");
        }
    }
}

return语句return inputNumber后的行;不会被处决的。您不需要设置validAccount,因为当您从函数返回时,其值会从堆栈中消失。由于您正在返回或从循环中断,因此整个validAccount逻辑无论如何都是冗余的。谢谢大家的快速回复!很快就解决了那个问题!我仍然有一个错误,不是所有的代码路径都返回一个值,但是,有什么见解吗?请检查我的答案以修复该错误。没有理由设置validAccount。函数返回后,您无法访问validAccount。谢谢,这解决了一个问题!但是,我仍然收到一个“并非所有代码路径都返回值”错误,我无法运行以测试它。此代码避免了“并非所有代码路径也返回值”,但返回0。您必须将代码配置为处理返回的0。以前,如果用户输入0,您就中断了循环,然后循环后没有代码,因此函数将命中结尾的大括号,而不返回任何内容。函数在声明返回类型时总是必须返回一个值,因此编译器会抛出一个错误。谢谢,这真的很有帮助!正是我需要的!没问题。祝你的节目好运!