0

我正在自学一些 C#,并产生了构建温度计算器的想法。我想使用 do-while 循环来确保用户选择有效的菜单选项。我试图做的是:

do
{
  //etc etc etc;
} (while menuChoice != 1||2||3);

换句话说,除非 menuChoice 为 1、2 或 3,否则请继续执行循环内的操作。VS2010 Express 告诉我我不能这样做。有没有办法这样做,还是我必须做其他事情?关于如何做到这一点的任何建议,或者我应该使用其他解决方案吗?

4

5 回答 5

5
do { // stuff
} while (menuChoice != 1 && menuChoice != 2 && menuChoice != 3);
于 2011-01-24T06:22:28.930 回答
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
于 2011-01-24T06:22:55.033 回答
1

编辑:

这个怎么样?这将允许您拥有一组不连续的数字,并且比拥有一百万 || 更具可扩展性 声明...:

int[] menuOptions = { 1, 2, 3 };

...

while(!menuOptions.Contains(menuChoice))
于 2011-01-24T06:23:25.697 回答
0

或者:

do {
    // etc.
} while(menuChoice > 3 || menuChoice < 1);
于 2011-01-24T06:24:15.433 回答
-1

只是为了提供另一种解决方案

using System.Collections.Generic; // for the List<T>
do
{
}
while (!(new List<Int32>(new[]{ 1, 2, 3 })).Contains(menuChoice));

是的,这不是最好的解决方案,但是,它是一种替代方案(如果您的选项列表增加,它很有用)。

于 2011-01-24T06:27:01.567 回答