2017-06-04 15 views
0

私はC#で始まりました。まず第一に、私のコードについてどう思いますか、改善すべきことは何ですか?第二に、ユーザーに2つの数字を入力するように頼んだら、どうやって数字を入力するだけですか?ユーザーが別の文字を入力すると、ループが止まり、プログラムがクラッシュします。ユーザ入力の数字だけを許可する方法

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

namespace App1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool retry = true; 
      while (retry) 
      { 
       retry = true; 
       double x1; 
       double x2; 
       double x3; 
       string calc; 
       Console.WriteLine("**** Hello, Welcome to Calculator ****"); 
       Console.WriteLine("Type a number please: "); 

       x1 = Convert.ToDouble(Console.ReadLine()); 
       Console.WriteLine("\n Now type another number: "); 
       x2 = Convert.ToDouble(Console.ReadLine()); 

       Console.WriteLine("\n Now please select a calculation:(/,*,+/-)"); 
       calc = Convert.ToString(Console.ReadLine()); 
       if (calc == "*") 
       { 
        x3 = (x1 * x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "/") 
       { 
        x3 = (x1/x2); Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "+") 
       { 
        x3 = (x1 + x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "-") 
       { 
        x3 = (x1 - x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else 
       { 
        Console.WriteLine("\n Error, please type one of the 4 calculations: "); 
        retry = true; 
       } 

       //Don't Exit: 
       Console.ReadKey(); 
       //Don't Exit: 
      } 
     } 
    } 
} 

答えて

1

あなたは、ユーザーの入力が有効倍であることを確認するDouble.TryParseを使用することができます。このメソッドは、無効な入力を受け取った場合に例外をスローしないという利点があります。

このような使い方の作品:

double x1; 
Console.WriteLine("Type a number please: "); 
bool success = Double.TryParse(Console.ReadLine(), out x1); 

我々がここでやっているが、我々は、二重に入力を変換しようとするためにC#を言っているです。これが機能する場合、successがtrueで、x1がその値を保持します。そうでない場合、成功はfalseであり、例外はスローされません。

注:この構文がわかりにくい場合は、outキーワードの文書をすばやくお読みください。

success変数を使用すると、ユーザーが番号を入力したかどうかを知ることができます。

bool success = false; 
double x1; 
while (!success) 
{ 
    Console.WriteLine("Type a number please: "); 
    success = Double.TryParse(Console.ReadLine(), out x1); 
} 

ユーザーが番号を入力するまでこのループは、何度も何度も繰り返すことになり、それをその時点で、ユーザがそのように番号を入力した場合、プログラムがのみ進行するように、ループ内でこのすべてを包むことができます入力はx1に格納されます。 2番目の数値だけでなく、操作入力(加算、乗算など)でもこれを繰り返すことができます。

アドバイスの余分な部分、私は可能性がある場合、チェーン非常に多くのelse if文だけでなく、あなたのコード内のretry変数が不要になりbreakキーワードに手間が省けますC#のswitchキーワード、見てみましょう。

編集:「割り当てられていないローカル変数の使用」を防止するには、数値に初期値を指定する必要があります。例:

double x1 = 0.0; 

これは有効な番号が入力されていて、その値が変更されるまで実行が進んでいない、あなたはループと一緒に行ったと仮定すると、以降のプログラムには影響しません。

+0

ありがとう、私のコードではx1とx2に値がないとは言えません。 – user1930233

+1

申し訳ありませんが、それを逃した。編集を確認してください。 – stybl

+0

素晴らしい、完璧に動作します。あなたが言ったのと同様にswitch文を調べます。 – user1930233

関連する問題