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

それはうまくいくでしょうか?または、各ケースの定数式に、使用しているオプション番号を付ける必要がありますか?

Microsoft の Web サイトにアクセスしましたが、探していたものをまったく見つけられませんでした。.

また、私はあなたの注意を払っていますが、ユーザーがどちらのオプションからも選択できるようにするにはどうすればよいですか? それで、私が持っているものは機能しますか?

私はこれをすべて手作業で行っていますが、他にも取り組むべきコースがたくさんあり、退屈な仕事に行く必要があり、自宅の PC には再起動の問題があるため、これに取り組むラボの時間はあまりありません (笑)。

すっごくすべての助けが大歓迎です。

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

私はそれを2つの異なる方法に分けます。bool で while ループを実行します。いずれかの条件が選択されている場合、その bool は true であり、ループは中断されます。

編集..明確にするために:

bool フラグを false に設定します。次に、while ループを作成します。main メソッドで入力を取得します。ユーザーが入力した値が 1,3,5,7 の場合、フラグを true に設定し、ループを中断します。コンソールの readline はもう必要ありません。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 に答える
1

これは、含めなかったステートメント (5、7、またはユーザーが入力したもの) に対してデフォルトのステートメントが起動されることを意味します。

于 2013-11-11T03:50:43.820 に答える
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 に答える