0

假设我正在制作一个简单的程序,并且用户在菜单中。

菜单选项是 1 3 5 7 (我实际上不会这样做,但让我们继续吧)。

我想做我的 switch 语句

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DecisionMaking2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please choose an option: ");
            string SelectedOpt = Console.ReadLine();
            double Selection = Convert.ToDouble(SelectedOpt);

            double MenuOption = (Selection);

            switch (MenuOption)
            {
                case 1:
                    Console.WriteLine("Selected option #1");
                    break;
                case 2:
                    Console.WriteLine("Selected option #3");
                    break;
                case 3:
                    Console.WriteLine("Selected option #5");
                    break;
                case 4:
                    Console.WriteLine("Selected option #7");
                    break;
                default:
                    Console.WriteLine("Please choose from the options List!");
                    break;
            }
        }
    }
}

那行得通吗?还是我必须将每个案例常量表达式命名为我正在使用的选项号?

我去了微软网站,但我并没有完全找到我要找的任何东西。.

另外,当我引起您的注意时,我将如何使用户从任一选项中进行选择,并且因为我不知道用户将选择哪个选项“ double MenuOption = ”可以是任何东西,无论用户输入正确吗?那么我什至可以工作吗?

我都是手工完成的,没有太多的实验室时间来做这件事,因为我有很多其他的课程要学习,然后是一份无聊的工作要去做,而且我家里的电脑有重启问题哈哈。

非常感谢任何和所有的帮助。

ps 我现在正在发布此内容的计算机,没有任何编译器,编码程序,而且我不只是为了解决这个问题。

再次感谢!

4

4 回答 4

2

您的代码可能无法正常工作,甚至更糟糕的是,有时它可能会起作用,有时却不会。

您应该将 MenuOption 和 Selection 的数据类型从 double 更改为 integer。

双打本身就有错误,所以你可能会遇到选择默认的情况,因为即使用户在解析它时输入了“1”,你最终可能会得到类似 MenuOption = 1.000001 或 MenuOption = 0.999998

您还应该阅读编码标准。看看 IDesign C# 编码标准....

http://www.idesign.net/Downloads/GetDownload/1985

于 2013-11-11T04:01:10.453 回答
1

我会写这样的东西(前提是我理解你的问题是正确的):

Console.WriteLine("Please choose an option: ");
string selectedOpt = Console.ReadLine();
int option = 0;
if (int.TryParse(selectedOpt, out option))
{
    switch (option)
    {
        case 1:
        case 3:
        case 5:
        case 7:
            Console.WriteLine("Selected option {0}", option);
            break;
        default:
            Console.WriteLine("Please choose from the options list!");
            break;
    }
}
else
{
    Console.WriteLine("That's an invalid option");
}
于 2013-11-11T04:00:01.207 回答
1

It means the default statement would get fired for the ones you didn't include: 5, 7 or whatever the user inputted.

于 2013-11-11T03:50:43.820 回答
1

我会把它分成两种不同的方法。用 bool 做一个 while 循环。如果选择了任何条件,则该 bool 为真并且循环中断。

编辑..只是为了让它更清楚:

将布尔标志设置为 false。然后创建一个while循环。在 main 方法中获取输入。如果用户输入的值为 1、3、5、7,则将标志设置为 true,中断循环。没有更多的控制台读取线。如果说 4,继续 while 循环,获取用户输入.. 并再次检查..

我并不是说不要执行 switch 语句。你的 switch 语句仍然是必要的。如果您希望用户最终输入正确的值,您会希望它处于循环中。一旦他们这样做了,就摆脱它。

这是另一个 SO 帖子的类似答案。这总结了我的逻辑。

bool validEntry;
int Selection = 0;
do
{
Console.WriteLine("Please choose an option: ");
        string SelectedOpt = Console.ReadLine();
        validEntry = int.TryParse(SelectedOpt , out Selection);
       if (!validEntry)
       {
          Console.WriteLine("Entry must be an integer.");
       }

        int MenuOption = (Selection);

        switch (MenuOption)
        {
            case 1:
                Console.WriteLine("Selected option #1");
                break;
            case 2:
                Console.WriteLine("Selected option #3");
                break;
            case 3:
                Console.WriteLine("Selected option #5");
                break;
            case 4:
                Console.WriteLine("Selected option #7");
                break;
            default: 
               validEntry = false; //need to make this false again.
                break;
        }


if (!validEntry)
{
    Console.WriteLine("Please choose from the options List!");
}
} while (!validEntry);
于 2013-11-11T03:53:15.720 回答