1

私はC#でswitch caseステートメントを作成しました。これには、ユーザーに選択するためのいくつかのオプションを提供することが含まれます。ユーザーが無効なオプションを入力した場合に、(おそらく何らかのループを介して)再度実行する必要があります。親切に助けてください、それはかなり基本的なことだと思います。

     static void Main(string[] args)
        {
            int a,b,ch;

            Console.WriteLine("Enter the value of a:");
            a = Convert.ToInt32(Console.ReadLine());   

            Console.WriteLine("Enter the value of b:");
            b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Enter your choice : Addition:0  Subtraction:1  Multiplication :2 :");
            ch = Convert.ToInt32(Console.ReadLine());
            switch(ch)
            {
                case 0: {
                    Console.WriteLine("Addition value is :{0}", a + b);
                    break;
                }
                case 1:
                    {
                        Console.WriteLine("Subtraction value is :{0}", a - b);
                        break;
                    }
                case 2:
                    {
                        Console.WriteLine("Multiplication value is :{0}", a * b);
                        break;
                    }
                default:
                    {
                        Console.WriteLine("Invalid choice ");
                        goto switch(ch); 

//please tell me what should i write here, it should go to the start of the switch case
                    }
                case 4:
                    {
                         continue; 

 //please tell me what should i write here.it should come out of the loop show the result
                    }       
                    }
              }
           }
    }
}
4

8 に答える 8

4

したがって、ここでの主な問題は、whileループにとどまり、必要に応じて中断する必要があることです。Typeここで興味深い点は、ユーザーからの入力をより適切に検証する必要があるということです。たとえば、次の 2 行です。

Console.WriteLine("Enter the value of a:"); 
a = Convert.ToInt32(Console.ReadLine());    

実際には次のものに置き換える必要があります。

while (true)
{    
    Console.WriteLine("Enter the value of a:"); 
    if (Int32.TryParse(Console.ReadLine(), out a))
    {
        break;
    }
}

同様に、同じことを行っている場所が他に 3 つあります。そのため、メソッドを作成して呼び出すことをお勧めします。これは次のようになります。

private static int GetIntegerInput(string prompt)
{
    int result;
    Console.WriteLine();

    while (true)
    {
        // THIS SHOULD OVERWRITE THE SAME PROMPT EVERY TIME
        Console.Write(prompt); 
        if (Int32.TryParse(Console.ReadLine(), out result))
        {
            break;
        }
    }
    return result;
}

そして、次のように呼び出します。

a = GetIntegerInput("Enter the value of a:");

aこれで、b、 、の 3 つのブロックすべてに再利用できますch。型付き入力から保護するためのメソッドの呼び出しを含む完全な例を次に示します。

static void Main(string[] args) 
{ 
    int a,b,ch; 

    while (ch != 4)
    { 
        // GET READY TO ASK THE USER AGAIN
        Console.Clear();

        a = GetIntegerInput("Enter the value of a:");
        b = GetIntegerInput("Enter the value of b:");
        ch = GetIntegerInput("Enter your choice : Addition:0  Subtraction:1  Multiplication :2 :");

        switch(ch) 
        { 
            case 0:
            { 
                Console.WriteLine("Addition value is :{0}", a + b); 
                break; 
            } 
            case 1: 
            { 
                Console.WriteLine("Subtraction value is :{0}", a - b); 
                break; 
            } 
            case 2: 
            { 
                Console.WriteLine("Multiplication value is :{0}", a * b); 
                break; 
            } 
            default: 
            { 
                Console.WriteLine("Invalid choice "); 

                // THIS GOES TO THE BEGINNING OF THE LOOP
                // SO THAT YOU CAN ASK THE USER AGAIN FOR
                // MORE CORRECT INPUT
                continue;
            }
        }

        // THIS WILL BREAK YOU OUT OF THE LOOP ON A GOOD ENTRY
        break;
    }
}
于 2012-08-10T10:21:38.877 に答える
2

ループを持っていない int ch はデフォルトで 0 になります。したがって、ケース 0 にしか入りません。含める必要があります。goto case 1;

詳細については、http://www.dotnetperls.com/switch をご覧ください。

于 2012-08-10T10:21:59.840 に答える
1

ユーザーが間違ったものを入力できるようにしてから、正しくなるまですべてをもう一度実行するのではなく、厳密な選択肢をユーザーに与えてはどうでしょうか。以下のコードを参照してください。

using System;

public static class Program
{
    static void Main()
    {
        const int addition = 0;
        const int subtraction = 1;
        const int multiplication = 2;

        var a = GetInt32("Enter the value of a:");  
        var b = GetInt32("Enter the value of b:");

choose:        
        var choice = GetInt32(string.Format(@"Enter your choice:
            {0}: Addition
            {1}: Subtraction
            {2}: Multiplication", addition, subtraction, multiplication));  

        switch(choice)
        {
            case addition:
                {
                    Console.WriteLine("Addition value is :{0}", a + b);
                    break;
                }
            case subtraction:
                {
                    Console.WriteLine("Subtraction value is :{0}", a - b);
                    break;
                }
            case multiplication:
                {
                    Console.WriteLine("Multiplication value is :{0}", a * b);
                    break;
                }
            default:
                {
                    Console.WriteLine("Invalid choice ");
                    goto choose; 
                }
        }
    }

    private static int GetInt32(string prompt)
    {
        while(true)
        {
            Console.WriteLine(prompt);
            var line = Console.ReadLine();
            int result;
            if(int.TryParse(line, out result))
                return result;
        }
    }
}
于 2012-08-10T10:29:18.673 に答える
1

コードは簡単に修正できます。そもそもループはありません。

int a = 0, b = 0, ch = -1; //always initialize your variables.

do 
    Console.WriteLine("Enter the value of a:");
while(!int.TryParse(Console.ReadLine(), out a));

do 
    Console.WriteLine("Enter the value of b:");
while(!int.TryParse(Console.ReadLine(), out b));

while (ch != 4) //starts at -1 so it will surely enter the loop
{
    //Will keep asking until user enters "4", then it will exit
    do
        Console.WriteLine("Enter your choice : Addition:0  Subtraction:1  Multiplication :2 :");
    while(!int.TryParse(Console.ReadLine(), out ch));

    switch (ch)
    {
        case 0:
            {
                Console.WriteLine("Addition value is :{0}", a + b);

            } break;
        case 1:
            {
                Console.WriteLine("Subtraction value is :{0}", a - b);

            } break;
        case 2:
            {
                Console.WriteLine("Multiplication value is :{0}", a * b);

            } break;
        // case 4 is not needed, it will exit from the loop anyway
        default:
            {
                Console.WriteLine("Invalid choice");
            } break;
    }
}

編集:ユーザーが数字の代わりに「A」を入力した場合にコードが爆発しないように、大まかなエラーチェックを追加しました。

于 2012-08-10T10:26:55.613 に答える
0
    static void Main(string[] args)
    {
        int firstValue, secondValue, arithmeticOperation;
    RestartProgram:
        Console.WriteLine("Enter the value of a:");
        firstValue = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Enter the value of b:");
        secondValue = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Enter your choice : Addition:0  Subtraction:1  Multiplication :2 :");

        arithmeticOperation = Convert.ToInt32(Console.ReadLine());
        switch (arithmeticOperation)
        {
            case 0:
                {
                    Console.WriteLine("Addition value is :{0}", firstValue + secondValue);
                    break;
                }
            case 1:
                {
                    Console.WriteLine("Subtraction value is :{0}", firstValue - secondValue);
                    break;
                }
            case 2:
                {
                    Console.WriteLine("Multiplication value is :{0}", firstValue * secondValue);
                    break;
                }
            default:
                {
                    Console.WriteLine("Invalid choice ");
                    goto RestartProgram;
                }
        }

        Console.ReadLine();
    }

これはあなたが見つけているものですか?

于 2012-08-10T10:25:58.157 に答える
0
    static void Main(string[] args)
    {
        int a, b, ch;

        Console.WriteLine("Enter the value of a:");
        a = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Enter the value of b:");
        b = Convert.ToInt32(Console.ReadLine());
        start:
        Console.WriteLine("Enter your choice : Addition:0  Subtraction:1  Multiplication :2 :");

        ch = Convert.ToInt32(Console.ReadLine());

        switch (ch)
        {
            case 0: Console.WriteLine("Addition value is :{0}", a + b);
                break;

            case 1: Console.WriteLine("Subtraction value is :{0}", a - b);
                break;

            case 2: Console.WriteLine("Multiplication value is :{0}", a * b);
                break;

            default: Console.WriteLine("Invalid choice ");
                ch = 0;
                goto start;
        }
    }
于 2012-08-10T10:41:18.523 に答える
0
int i = 0;
while(i == 0)
{
    i == 1; // this will make it exit the loop unless case 4 happens   
    switch(ch)
    {
        case 0: {
            Console.WriteLine("Addition value is :{0}", a + b);
            break;
        }
        ...
        case 4 {
            i == 0;
            break;
        }
     }
}
于 2012-08-10T10:21:04.533 に答える
0
int ch = -1;
while(ch!= 0 && ch!= 1 && ch!=2)
    ch = Convert.ToInt32(Console.ReadLine());
switch(ch)   //correct input
于 2012-08-10T10:21:17.017 に答える