5

ユーザー入力キーを int に変換しようとしています。ユーザーは 1 から 6 までの数字を入力します。

これは私がこれまでメソッド内に座っていたもので、機能していませんが、フォーマット例外のスローは処理されませんでした。

        var UserInput = Console.ReadKey();



        var Bowl = int.Parse(UserInput.ToString());

        Console.WriteLine(Bowl);

       if (Bowl == 5)
        {
            Console.WriteLine("OUT!!!!");
        }
        else
        {
            GenerateResult();
        }

    }
4

5 に答える 5

14

に変換しようとしているだけSystem.ConsoleKeyInfoですint

あなたのコードでは、呼び出すと、現在のオブジェクトを表す文字列UserInput.ToString()が得られますが、保持または期待どおりではありません。valueChar

あなたが使用できるように保持を取得するにCharStringUserInput.KeyChar.ToString()

さらに、メソッドを使用ReadKeyするdigit前に確認する必要がありますint.ParseParse数値の変換に失敗すると、メソッドが例外をスローするためです。

したがって、次のようになります。

int Bowl; // Variable to hold number

ConsoleKeyInfo UserInput = Console.ReadKey(); // Get user input

// We check input for a Digit
if (char.IsDigit(UserInput.KeyChar))
{
     Bowl = int.Parse(UserInput.KeyChar.ToString()); // use Parse if it's a Digit
}
else
{
     Bowl = -1;  // Else we assign a default value
}

そしてあなたのコード:

int Bowl; // Variable to hold number

var UserInput = Console.ReadKey(); // get user input

int Bowl; // Variable to hold number

// We should check char for a Digit, so that we will not get exceptions from Parse method
if (char.IsDigit(UserInput.KeyChar))
{
    Bowl = int.Parse(UserInput.KeyChar.ToString());
    Console.WriteLine("\nUser Inserted : {0}",Bowl); // Say what user inserted 
}
else
{
     Bowl = -1;  // Else we assign a default value
     Console.WriteLine("\nUser didn't insert a Number"); // Say it wasn't a number
}

if (Bowl == 5)
{
    Console.WriteLine("OUT!!!!");
}
else
{
    GenerateResult();
}
于 2015-03-10T02:29:01.547 に答える
0

同様に:

ConsoleKeyInfo info = Console.ReadKey();
int val;
if (int.TryParse(info.KeyChar.ToString(), out val))
{
    Console.WriteLine("You pressed " + val.ToString());
}
于 2015-03-10T02:20:30.357 に答える