2016-09-13 5 views
2

編集。 受け取った答えに基づいて、私は学習の初期段階で私が知っている以上に多くのことを尋ねていることに気づいたので、もっと学び、理解するまでこの質問を忘れてしまいました。私は自分自身を過ぎて混乱させたくありません。誤った値を入力しました。スタートに行く。

ガイダンスを探している初心者。

私はここで質問した前の質問から、私はgoto Startに紹介されました。 switch文で

私はそれを使い始めました。ユーザーが無効な入力を入力したときにプログラムを開始したいと思っていました。例の下の私の電卓で、ユーザが数字以外の何かを入力した場合、入力を無視してユーザに数字を入力するように促すにはどうすればよいですか? 「無効な入力です。再試行してください」と表示されることもあります。

数字だけが入力された場合、コンソールがクラッシュしてエラーが表示されます。

援助未テスト

 int num1, num2, output; 
     string op; 

     Console.Write("\n\n"); 
     Console.WriteLine("Calculator\n"); 
     Console.WriteLine("============="); 
     Console.Write("\n\n"); 

     Start: 

     Console.Write("Please enter first number:"); 
     num1 = Convert.ToInt32(Console.ReadLine()); 


     Console.Write("Please enter second number: "); 
     num2 = Convert.ToInt32(Console.ReadLine()); 

     Operator: 

     Console.WriteLine("Please select operator: "); 
     Console.WriteLine("\nAddition : +"); 
     Console.WriteLine("Multiplication: *"); 
     Console.WriteLine("Division: /"); 
     Console.WriteLine("Subtraction: -"); 
     Console.Write("Enter Operator: "); 
     op = Console.ReadLine(); 




     switch (op) 
     { 
      case "+": 
       output = num1 + num2; 
       Console.WriteLine("{0} added to {1} = {2}", num1, num2, output); 
       break; 

      case "*": 
       output = num1 * num2; 
       Console.WriteLine("{0} multiplied by {1} = {2}", num1, num2, output); 
       break; 

      case "/": 
       if (num2 == 0) 
       { 
        Console.WriteLine("Cannot divide by zero. Please try again"); 
        goto Start; 

       } 
       else 
       { 
        output = num1/num2; 
        Console.WriteLine("{0} divided by {1} = {2}", num1, num2, output); 
        break; 
       } 

      case "-": 
       output = num1 - num2; 
       Console.WriteLine("{0} minus{1} = {2}", num1, num2, output); 
       break; 

      default: 
       Console.WriteLine("You entered an invalid operator. Please try again\n"); 
       goto Operator;      

     } 

     Console.WriteLine("\nPress enter to continue...."); 
     Console.ReadLine(); 

答えて

3

、何をするにしても、ませ使用gotoを行ってください。これまでたぶんを除いて他のcaseに落ちるかもしれませんが、それは非常にまれです。それはあなたのコードを読むことができず、混乱させ、維持しがたいものにします。 spaghetti codeを参照してください。

int num1; 
do 
{ 
    Console.Write("Please enter first number:"); 
} while (!Int32.TryParse(Console.ReadLine(), out num1)); 

をと(gotoを避けるために)このような何かにあなたのswitchを変更します:

bool inputOk = false; 
while (!inputOk) 
{ 
    Console.WriteLine("Please select operator: "); 
    //... 
    op = Console.ReadLine(); 

    inputOk = true; 
    switch (op) 
    { 
     //... 
     default: 
      Console.WriteLine("You entered an invalid operator. Please try again\n"); 
      inputOk = false; 
      break; 
    } 
} 
あなたが入力が有効であるかどうかわからない場合は代わりに ConvertInt32.TryParseを行う必要があり、言っ

+0

do/whileステートメントはまだ分かりません。( –

+0

@Judeあなたがよく知っているコンストラクトは分かりませんが、あなたが問題を抱えている場合は、あなたが選択したループをリファクタリングします。 – slawekwin

+0

正直なところ、/3週間前。 私はより多くの学習を開始し、より多くを理解することができる午前まで、私はちょうど今の私の質問を忘れるべきだと思います。 私はステップオーバーした可能性があります。 かかわらご協力いただきありがとうございます。 –

1

を事前に感謝しますが、これはあなたが望むことがあります

Start: 

Console.Write("Please enter first number:"); 
if (!int.TryParse(Console.ReadLine(), out num1)) 
    goto Start; 
//num1 = Convert.ToInt32(Console.ReadLine()); 


Console.Write("Please enter second number: "); 
num2 = Convert.ToInt32(Console.ReadLine()); 

Operator: 

... 

そして、あなたが必要な場合は、NUM2のためおそらく同じ。

+0

ありがとうございます。 –

1

これを達成する最良の方法は、EXCEPTIONを使用することです。あなたが学んでいるので、私はそれを行う方法のサンプルコードを提供しませんが、それについて読んでほしいでしょうherehere

1

gotoスイッチの中に定義しようとするとしようとします。あなたの例ではスタートケースはないので、どこに行くのか分からない。

詳細情報here

私は方法を使用することをお勧めします。

1

この状況では、goto文が適切ではないと思います。あなたのコードがたくさんある場合、あなたのコードは本当に乱雑になることがあります。 FormatExceptionを使用することは、例外をスローするのに時間がかかるため、お勧めしません。

代わりにInt32.TryParseを使用してください。

ここにサンプルコードがあります。これをプログラムに適用できるかどうかを確認してください。

int input; 
while(true) { 
    Console.WriteLine("Please enter a number"); 
    bool succeeds = Int32.TryParse(Console.ReadLine(), out input); 
    if (!succeeds) { 
     Console.WriteLine("Input Invalid! Try again!"); 
    } else { 
     break; 
    } 
} 
// make use of input here 
+0

それは私のためにちょっと混乱させて、それを信じるかどうかは分かりません。 –

+0

私はもう少し勉強するまでは、今のところそれを忘れてしまうと思います。 –

1
 int num1, num2, output; 
    string op; 

    Console.Write("\n\n"); 
    Console.WriteLine("Calculator\n"); 
    Console.WriteLine("============="); 
    Console.Write("\n\n"); 

Start: 

    do 
    { 
     Console.Write("Please enter valid first number:"); 
    } while (!int.TryParse(Console.ReadLine(), out num1)); 


    do 
    { 
     Console.Write("Please enter valid second number:"); 
    } while (!int.TryParse(Console.ReadLine(), out num2)); 

    Operator: 

    Console.WriteLine("Please select operator: "); 
    Console.WriteLine("\nAddition : +"); 
    Console.WriteLine("Multiplication: *"); 
    Console.WriteLine("Division: /"); 
    Console.WriteLine("Subtraction: -"); 
    Console.Write("Enter Operator: "); 
    op = Console.ReadLine(); 




    switch (op) 
    { 
     case "+": 
      output = num1 + num2; 
      Console.WriteLine("{0} added to {1} = {2}", num1, num2, output); 
      break; 

     case "*": 
      output = num1 * num2; 
      Console.WriteLine("{0} multiplied by {1} = {2}", num1, num2, output); 
      break; 

     case "/": 
      if (num2 == 0) 
      { 
       Console.WriteLine("Cannot divide by zero. Please try again"); 
       goto Start; 

      } 
      else 
      { 
       output = num1/num2; 
       Console.WriteLine("{0} divided by {1} = {2}", num1, num2, output); 
       break; 
      } 

     case "-": 
      output = num1 - num2; 
      Console.WriteLine("{0} minus{1} = {2}", num1, num2, output); 
      break; 

     default: 
      Console.WriteLine("You entered an invalid operator. Please try again\n"); 
      goto Operator;      

    } 

    Console.WriteLine("\nPress enter to continue...."); 
    Console.ReadLine(); 
関連する問題