私はC#での初心者です。ユーザーが何かを入力したときに検証の役割を果たすために 'Try and catch'ブロックを使用しようとしています。ユーザーが最初に無効な入力を入力したときに機能しますが、ユーザーが2回目に無効な入力を入力するとシステムがクラッシュします。Try-Catchブロックによる検証C#
私は、ユーザが正しい入力を入力しても、それほど成功していないときにtrueに設定されるbool変数を作成することでこの問題を解決しようとしました。
while (invalidInput == true)
{
try
{
{
Console.Write("Landscape Size: ");
LandscapeSize = Convert.ToInt32(Console.ReadLine());
Console.Write("Initial number of warrens: ");
InitialWarrenCount = Convert.ToInt32(Console.ReadLine());
Console.Write("Initial number of foxes: ");
InitialFoxCount = Convert.ToInt32(Console.ReadLine());
Console.Write("Randomness variability (percent): ");
Variability = Convert.ToInt32(Console.ReadLine());
FixedInitialLocations = false;
}
Sim = new Simulation(LandscapeSize, InitialWarrenCount, InitialFoxCount, Variability, FixedInitialLocations);
}
catch
{
Console.WriteLine("invalid input!");
LandscapeSize = Convert.ToInt32(Console.ReadLine());
InitialWarrenCount = Convert.ToInt32(Console.ReadLine());
InitialFoxCount = Convert.ToInt32(Console.ReadLine());
Variability = Convert.ToInt32(Console.ReadLine());
invalidInput = true;
}
invalidInput = false;
}
また、私は新しいです:ユーザーが正しい入力
C#のコードを入力すると
主な問題は、私はシステムを作る方法がわからないではfalseにブール変数を設定しました私は間違いがあれば申し訳ありませんオーバーフローをスタックする。
私の質問は何ですか?ありがとう
これは非常に悪い考えですが、あなたのバグは関係なく、ループの後に 'invalidInput = false; 'を設定しています。 'try 'の最後にある必要があります –
なぜそれは悪い考えですか?もっと効率的で簡単な方法がありますか?そしてあなたに感謝します。 – PRedator
'int.TryParse'は、より高速で、例外が制御フローに使用されるべきではないため、どちらも望ましいです。 –