0

ここでどこが間違っているのかについてアドバイスをお願いします。コンソールアプリケーションはメニューの選択肢を表示し、ユーザーに有効なメニューオプションを入力するように求めます。

これで、入力した数字が1、2、または3の場合、「オプションxを選択しました」と表示され、次に「任意のキーを押して閉じます」と表示されますが、プログラムには「オプションxを選択しました」と表示されません。次に、「任意のキーを押して閉じます」。ただし、数値が1未満または3を超える場合は、「メニューの選択が1〜3の間ではない」と言ってから、「再入力してください」と表示されます。どこが間違っているのですか?

私は長い間プログラミングをしていませんでしたが、今回エラーを修正できれば、将来を見据えています。

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

namespace _4._6
{
    class Program
{
    static void Main(string[] args)
    {
        int iChoice = 0;

        Console.WriteLine("1: Add two numbers");
        Console.WriteLine("2: Multiply two numbers");
        Console.WriteLine("3: Exit the program");

        Console.WriteLine("Enter your choice: ");
        iChoice = Convert.ToInt32(Console.ReadLine());


        while (iChoice < 1 || iChoice > 3)
        {
            Console.WriteLine("Menu choice not between 1-3: ");
            Console.Write("Please re-enter: ");
            iChoice = Convert.ToInt32(Console.ReadLine());
            Console.ReadKey();

            if  (iChoice > 1 || iChoice < 3)
            {
                Console.WriteLine("You have chosen option " + iChoice);
                iChoice = Convert.ToInt32(Console.ReadLine());
                Console.ReadKey();

            }



        }
    }
}

}

4

3 に答える 3

2

内側のifは、外側のifの状態と矛盾するため、入力できません。

このように変更します

    while (iChoice < 1 || iChoice > 3)
    {
        Console.WriteLine("Menu choice not between 1-3: ");
        Console.Write("Please re-enter: ");
        iChoice = Convert.ToInt32(Console.ReadLine());
        Console.ReadKey();

    }


    Console.WriteLine("You have chosen option " + iChoice);

また、コード内の2番目の条件が間違っていることに注意してください

于 2012-11-04T15:50:49.937 に答える
0

If ブロックは while ブロックの外にある必要があります。条件が false の場合、while ブロックは if ブロックを実行しないためです。つまり、 if ブロックが状態をチェックすることを許可していません

于 2012-11-04T15:51:49.697 に答える
0

iChoiceコード内の 2 か所でto を割り当てます。たぶん、次のように言う方が混乱が少ないでしょう:

    Console.WriteLine("1: Add two numbers");
    Console.WriteLine("2: Multiply two numbers");
    Console.WriteLine("3: Exit the program");

    Console.WriteLine("Enter your choice:");

    int iChoice;
    while (true)
    {
      int.TryParse(Console.ReadLine(), out iChoice);
      if (iChoice >= 1 && iChoice <=3)
        break; // choice is OK

      Console.WriteLine("Menu choice not between 1-3.");
      Console.Write("Please re-enter:");
    }

    Console.WriteLine("You have chosen option " + iChoice);
    // ...

注: に変更Convert.ToInt32しただけint.TryParseです。利点は、ユーザーが「sdfih」のように数値ではないものを入力した場合iChoice、アプリケーションをクラッシュさせる代わりにゼロにすることです。

于 2012-11-04T16:15:01.163 に答える