2017-07-02 31 views
0

私は単純な奇数/偶数番号のプログラムを作ろうとしていますが、ユーザーが入力した番号を比較したいと思います。数字ではない記号を入力すると、2番目の例外が表示されます。何の価値も与えていないのに、最初のものを除いて私はまだ2番目のものを得ています。私の質問は、Enterを押すだけで最初の例外テキストを取得する方法です。なぜなら、今は私が入力したものの2番目のものしか取得しないからです。入力の奇数/偶数番号

Console.WriteLine("Enter a number: "); 
     try 
     { 
      var number = int.Parse(Console.ReadLine()); 
      if (number % 2 == 0) 
       Console.WriteLine($"Entered number {number} is even."); 

      else 
       Console.WriteLine($"Entered number {number} is odd."); 
     } 
     catch (ArgumentNullException) 
     { 
      Console.WriteLine("You need to enter some value."); 
     } 

     catch (Exception) 
     { 
      Console.WriteLine("You need to enter a number."); 
     } 
+0

あなたの質問は何ですか?ところで、私はあなたが入力行を読んで、それが空ではないことを確認し、次にそれを解析しようとしてください。 –

+0

もっと明示してください。 –

+0

申し訳ありませんが、私は十分にはっきりしませんでした。最初の例外テキストを表示するには、Enterキーを押したときに表示する必要があります。なぜなら、今は常に2番目の例外テキストを取得するからです。 –

答えて

2

string.Emptyint.Parseに渡されているときにEnterキーを押すだけの場合は、FormatExceptionをキャッチする必要があります。 int.Parseに渡された入力値がnullの場合にのみ、ArgumentNullExceptionがスローされます。入力した値に応じてこれを行い、異なるメッセージを書く方法の例を次に示します。

Console.WriteLine("Enter a number: "); 
string input = Console.ReadLine(); 
try 
{ 
    var number = int.Parse(input); 
    if (number % 2 == 0) 
     Console.WriteLine($"Entered number {number} is even."); 

    else 
     Console.WriteLine($"Entered number {number} is odd."); 
} 
catch (FormatException exc) 
{ 
    if(string.IsNullOrEmpty(input)) 
    { 
     Console.WriteLine("You need to enter some value."); 
    } 
    else 
    { 
     Console.WriteLine("You need to enter a number."); 
    } 

} 

catch (Exception exc) 
{ 
    Console.WriteLine("You need to enter a number."); 
} 
+0

ええ、 'FormatException'は両方の文字をキャッチするようになりました。それは、ありがとう! 2つの異なる例外を表示する方法があります.1つはユーザーが数字ではないものを入力し、もう1つは入力するだけです。 –

+0

@MarkWest更新された回答をご覧ください –

+0

それは、ありがとうございます!なぜ私の質問が下落したのか分かりません。 –

0

あなたが任意の値を入力しない場合、値はヌルが、「」(空の文字列)ではない、それはそれは例外ArgumentNullExceptionない理由

だジョージ・アレキサンドリアは

を提案した方法を実行します
string s = Console.ReadLine(); 
if(s == "") 
{ Console.WriteLine("You need 
    to enter some value."); } 
+0

最初の例外が機能するように編集するにはどうすればよいですか?何とかiSNullOrEmptyを使用しますか? –

+0

編集されたコード@マークウエスト –

+0

あなたのコードは有効ではありません。C# –

2

これを試してみてください:

var str = Console.ReadLine(); 
if (string.IsNullOrEmpty(str)) 
{ 
    Console.WriteLine("You need to enter some value."); 
} 
else 
{ 
    int number; 
    if (!int.TryParse(str, out number)) 
    { 
     Console.WriteLine("You need to enter a number."); 
    } 
    else 
    { 
     if (number % 2 == 0) 
      Console.WriteLine($"Entered number {number} is even."); 
     else 
      Console.WriteLine($"Entered number {number} is odd."); 
    } 
} 
+0

これは間違いなく動作してくれてありがとうございますが、私は例外でそれをやりたかったのです。 –

+0

@ MarkWest 'try/cath'の構造がコードよりも遅いことを知っていますか? それを知っていて、それを使用したいと思うなら、それはあなたの選択です。 –

+0

私は今、スピードについて本当に心配していません。私はちょうど異なるアプローチを学ぼうとしています。 –

関連する問題