1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lotto
{
class Program
{

    static void Main(string[] args)
    {
        char k = 'l';
        while (!(k == 'k'))
        {
            Random rnd = new Random();
            int[] tablica = new int[6];
            for (int i = 0; i < 6; i++)
            {

                    tablica[i] = 0;

            }
                for (int i = 0, z; i < 6; i++)
                {
                   {
                    z = rnd.Next(1, 49);
                    while (tablica.Contains(z))
                    {
                        z = rnd.Next(1, 49);
                    }
                    tablica[i] = z;
                }
            }
            Array.Sort(tablica);
            foreach (int q in tablica)
            {
                Console.Write(q);
                Console.Write(", ");
            }
            k = Convert.ToChar(Console.Read()) ;
            Console.WriteLine("\n\n\n");
        }
    }


    }
 }

それは問題なく動作します。ステップバイステップのクリック(ビジュアルスタジオでF10)を使用すると、正常に動作します。しかし、通常どおり実行すると、

k=Convert.ToChar(Console.Read());

「k」を指定すると、意図したとおりにプログラムが停止します。私が何も供給しないとき、それは

 foreach (int q in tablica)
        {
            Console.Write(q);
            Console.Write(", ");
        }
        k = Convert.ToChar(Console.Read()) ;
        Console.WriteLine("\n\n\n");

2 回、「k」以外を指定すると 3 回実行されます。なんてこったい。

4

3 に答える 3

6

Console.Read入力ストリーム ( doc )から一度に 1 文字を読み取ります。Enter キーを押すと、次の2文字が入力されます。したがって、\r\nのユーザー入力のために一時停止する前に、2 文字を読み取る必要があります。

ループしているものを確認するために F10 を使用したとき、どのように正常に実行されたか混乱しています。たまたまEnter「何もない」を指定したときに使用し、文字が飛び出すのを見ました。

于 2013-06-17T13:29:47.473 に答える
1

を使用するConsole.Read()と、実際には入力プラスが得"\r\n"られるため、ENTER を使用すると"\r\n"(2 文字) が得られます。文字「m」を入力すると、入力は「m\r\n」(3 文字) になります。 「1」の違いがある理由。

その上、なぜ使用するのint i = 0, z;ですか?これは C++ の使用法であるため、ここでは何の意味もあり, zません。

于 2013-06-17T14:27:47.223 に答える
1

Console.Read() からの入力をキャプチャして、何が得られるかを確認しましたか? 制御文字が読み込まれていて、char に正しく変換できていないことが関係している可能性があります。

また、完全に別として、コードを再フォーマットすることをお勧めします (2 番目の for ループに余分な "{}" があります)。また、変数に意味のある名前を付けることは常に良い習慣です。i、j、k などには固有の意味はありません。将来的にコードをリファクタリング/維持するのが簡単になります。

私はあなたのコードの残りの部分を詳しく見ていませんでしたが、多くのことを行うためのより短い/より簡単な方法があると思います. 1 つのメソッドでの for/foreach/while ループの多さには、コードの匂いがします。

于 2013-06-17T13:35:04.940 に答える