2

ここで問題がわかりません。

エントリを呼び出すと、無限ループに陥ります。

私はwcfを実行しているので、サーバーは正常に動作しています。これは私のクライアントです。ループを外せばすべてがうまくいきます。しかし、私はメニューのためにこれらが必要です。だから私は私のコードが正しいことを知っていますが、私のループは正しくありません。

どこが悪いのかわからない。

class Client
{
    static void Main(string[] args)
    {
        try
        {
            BikeReference.BikeSalesClient bikeRef = new BikeClient.BikeReference.BikeSalesClient();
            String menu = "\n\nEnter:\n" +
                "0 to get all the bike stock;\n" +
                "1 to get all the bike types;\n" +
                // ...
                "8 to quit:\n";

            Console.WriteLine(menu);

            // will throw FormatException if not int
            int entry = int.Parse(Console.ReadLine());

            do
            {
                switch (entry)
                {
                    case 0:
                        foreach (var obj in bikeRef.GetAllBikeStock())
                        {
                            Console.WriteLine("");
                            Console.WriteLine("Bike ID: {0}", obj.IdBikeStock);
                            Console.WriteLine("Bike Type ID: {0}", obj.IdBikeType);
                            // ...
                            Console.WriteLine("Sold: {0}", obj.isItSold);
                            //break;
                        }
                        break;

                    case 1:
                        Console.WriteLine(bikeRef.UpdateBikeStock(15));
                        break;

                    default:
                        Console.WriteLine("Unrecognised option...");
                        break;
                }
            }
            while (entry != 7);
        }

        catch (Exception)//(Exception e)
        {
           // Console.WriteLine("{0} Exception caught.", e);
        }
    }
}
4

4 に答える 4

5

ループ内のエントリ変数を変更します

int entry = 0; //Init
do
{
    Console.WriteLine(menu);

    // will throw FormatException if not int
    entry = int.Parse(Console.ReadLine());
    ...
} while (entry != 7);
于 2012-11-22T16:15:05.450 に答える
4

ループ内では、変数「entry」を変更していません。したがって、最初のエントリ= 7でない限り、ループでスタックします。(entry != 7)これは、while (entry != 7);

entry = int.Parse(Console.ReadLine());前に行を追加しswitch (entry)ます。この方法では、エントリが7に等しい可能性がある場合、「エントリ」を要求し続けます。したがって、ループから抜け出します。

    int entry;

    do
    {  
        Console.WriteLine(menu);

        entry = int.Parse(Console.ReadLine());
        switch (entry)
        //...
   }while (entry != 7);
于 2012-11-22T16:14:13.890 に答える
2

上で書いたようentryに、ループ内の変数を変更する必要があります。

class Client
{
    static void Main(string[] args)
    {
        try
        {
            BikeReference.BikeSalesClient bikeRef = new BikeClient.BikeReference.BikeSalesClient();
            String menu = "\n\nEnter:\n" +
                "0 to get all the bike stock;\n" +
                "1 to get all the bike types;\n" +
                // ...
                "8 to quit:\n";

            Console.WriteLine(menu);

                // will throw FormatException if not int
                int entry = int.Parse(Console.ReadLine());

            do
            {
                switch (entry)
                {
                    case 0:
                        foreach (var obj in bikeRef.GetAllBikeStock())
                        {
                            Console.WriteLine("");
                            Console.WriteLine("Bike ID: {0}", obj.IdBikeStock);
                            Console.WriteLine("Bike Type ID: {0}", obj.IdBikeType);
                            // ...
                            Console.WriteLine("Sold: {0}", obj.isItSold);
                            //break;
                        }
                        break;

                    case 1:
                        Console.WriteLine(bikeRef.UpdateBikeStock(15));
                        break;

                    default:
                        Console.WriteLine("Unrecognised option...");
                        break;
                }
            entry = int.Parse(Console.ReadLine());
            }
            while (entry != 7);
        }

        catch (Exception)//(Exception e)
        {
           // Console.WriteLine("{0} Exception caught.", e);
        }
    }
}
于 2012-11-22T16:31:07.277 に答える
0

切り替え後、入力を待つ必要があります。そうしないと、エントリは!=7になることができません。

于 2012-11-22T16:15:28.043 に答える