2017-02-23 8 views
-1
class Program 
{ 
    static void Main(string[] args) 
    { 
     bool run = true; 
     do 
     { 
      Console.WriteLine("Make a choice or type 0 to exit: "); 
      Console.WriteLine("1. Add 2 numbers\n2. Subtract 2 numbers\n3.Multiply 2 numbers\n4. Divide 2 numbers"); 
      int choice = Convert.ToInt32(Console.ReadLine()); 

      if (choice == 0) 
      { 
       run = false; 
      } 
      if(choice == 1) 
      { 
       int x, y; 
       Console.Write("Enter 2 numbers to Operate on: "); 
       x = Convert.ToInt32(Console.Read()); 
       y = Convert.ToInt32(Console.Read()); 
       Console.WriteLine("The Result is: {0}", Convert.ToInt32(add(x,y))); 
      } 

     }while(run); 
     Console.ReadKey(); 
    } 

    public static int add(int x, int y) 
    { 
     return x+y; 
    } 

    public static int sub(int x, int y) 
    { 
     return x - y; 
    } 

    public static int mult(int x, int y) 
    { 
     return x * y; 
    } 

    public static double div(int x, int y) 
    { 
     return (float)x/y; 
    } 

私はかなりC#を新しくしていますので、是正措置についてお詫び申し上げます。 問題は、実行して1を入力して2と4を入力すると、82が戻ってメニューが2回印刷されるということです。これは明らかに正しくありません。誰かがなぜこれが起こっているのか教えてくれますか?なぜ私の変換を行うのか何かがあると思いますが、言語がどう動くのかを確かめたいのですが、これはうまくいくはずです。お手伝いありがとう。C#で電卓を作ろうとしています。ここで何がうまくいかないのですか?

編集:

Make a choice or type 0 to exit: 
1. Add 2 numbers 
2. Subtract 2 numbers 
3. Multiply 2 numbers 
4. Divide 2 numbers 
1 
Enter 2 numbers to Operate on: 2 4 
The Result is: 82 
Make a choice or type 0 to exit: 
1. Add 2 numbers 
2. Subtract 2 numbers 
3. Multiply 2 numbers 
4. Divide 2 numbers 
Make a choice or type 0 to exit: 
1. Add 2 numbers 
2. Subtract 2 numbers 
3. Multiply 2 numbers 
4. Divide 2 numbers 
+0

['Console.Read'](https://msdn.microsoft.com/en-us/library/system.console.read(v = vs.110).aspx)のドキュメントをお読みください。それがあなたが*期待する*ことをしていますか? (また、すでに 'int'を返すので、' add'と同様に、あなたの変換は現在全く無意味です) –

+0

Damien、それは次の文字を読むことになっていると言います。私は2 intを入力した場合、私は書いたようにそれらをバックに読んではいけませんか? –

+0

3文字、 '2'、スペース、および '4'を入力したように見えるので、2つの読み込みで「2」文字と空白文字が読み込まれます。 '2'、' 2'、スペース、 '4'と' 1'、続いてenter)、つまり '2241'という文字列を入力した場合、2つの読み込みで2つの' 2'文字が読み込まれます。それで、あなたが*期待しているのは? –

答えて

2

問題はここにある:

私は私はdownvotedてしまった理由は、私が間違って何をしたか教えてください...ここで

は、サンプル出力ではよく分かりません

x = Convert.ToInt32(Console.Read()); 
y = Convert.ToInt32(Console.Read()); 

ここではReadを使用しないでください。 Readは1文字を読み込み、対応するASCII値に変換します。基本的には、ASCII値を一緒に追加しています。

ソリューション:

あなただけReadLineのように変更します。

x = Convert.ToInt32(Console.ReadLine()); 
y = Convert.ToInt32(Console.ReadLine()); 
をしかし、あなたは二つの数字が 2 4のように、スペースで区切っする場合は、あなたが行うことができます:

string[] numbers = Console.ReadLine().Split(' '); 
x = Convert.ToInt32(numbers[0]); 
y = Convert.ToInt32(numbers[1]); 
+0

それはそれを固定して意味がありました。答えるだけでなく、私が間違ったことを説明してくれてありがとう。私は大いに感謝します。 –

+0

Int32.TryParseを使用すると、ユーザーが数値以外の入力を入力した場合の例外を回避できます。 – Brijesh

関連する問題