我正在尝试编写代码(在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
也许我只是长时间盯着这看,并且看不到我犯过的那个简单的错误。如果这个问题已经解决,我欢迎有新的视角或指导我能找到解决方案的地方。 (它有点难以谷歌类似于&#34;无法访问的代码&#34;当代码必须如此具体......)
答案 0 :(得分:1)
带有错误的行正好在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");
}
}
}
答案 1 :(得分:0)
切换这两个:
return inputNumber;
validAccount = true;
答案 2 :(得分:0)
请注意,return
声明会立即将您带出该功能。那么下一个validAccount = true;
永远不会被执行!