我正在自学一些 C#,并产生了构建温度计算器的想法。我想使用 do-while 循环来确保用户选择有效的菜单选项。我试图做的是:
do
{
//etc etc etc;
} (while menuChoice != 1||2||3);
换句话说,除非 menuChoice 为 1、2 或 3,否则请继续执行循环内的操作。VS2010 Express 告诉我我不能这样做。有没有办法这样做,还是我必须做其他事情?关于如何做到这一点的任何建议,或者我应该使用其他解决方案吗?
我正在自学一些 C#,并产生了构建温度计算器的想法。我想使用 do-while 循环来确保用户选择有效的菜单选项。我试图做的是:
do
{
//etc etc etc;
} (while menuChoice != 1||2||3);
换句话说,除非 menuChoice 为 1、2 或 3,否则请继续执行循环内的操作。VS2010 Express 告诉我我不能这样做。有没有办法这样做,还是我必须做其他事情?关于如何做到这一点的任何建议,或者我应该使用其他解决方案吗?
do { // stuff
} while (menuChoice != 1 && menuChoice != 2 && menuChoice != 3);
do {
// etc.
} while(menuChoice != 1 &&
menuChoice != 2 &&
menuChoice != 3
);
连词的每个子句都必须是计算结果为 a 的表达式bool
。请注意,这!= 2
不是计算结果为 a 的表达式bool
。事实上,它甚至不是一个合法的表达方式。这就是为什么您必须指定menuChoice != 2
.
另外,请注意您应该使用&&
因为子句。你想要menuChoice
等于 1,或者等于 2,或者等于 3。因此你想要
!(menuChoice == 1 || menuChoice == 2 || menuChoice == 3)
作为while
循环中的条件。根据德摩根定律,这相当于
menuChoice != 1 && menuChoice != 2 && menuChoice != 3
编辑:
这个怎么样?这将允许您拥有一组不连续的数字,并且比拥有一百万 || 更具可扩展性 声明...:
int[] menuOptions = { 1, 2, 3 };
...
while(!menuOptions.Contains(menuChoice))
或者:
do {
// etc.
} while(menuChoice > 3 || menuChoice < 1);
只是为了提供另一种解决方案:
using System.Collections.Generic; // for the List<T>
do
{
}
while (!(new List<Int32>(new[]{ 1, 2, 3 })).Contains(menuChoice));
是的,这不是最好的解决方案,但是,它是一种替代方案(如果您的选项列表增加,它很有用)。