2017-02-23 47 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 назад, а затем дважды печатается меню. Это явно неверно. Может кто-нибудь сказать мне, почему это происходит? Я полагаю, что есть что-то делать, почему мои конверсии, но я хотел бы точно знать, почему язык ведет себя так, как будто это происходит, потому что похоже, что он должен работать. Спасибо вам за помощь.Попытка сделать калькулятор в C#. Что здесь происходит?

Edit: Я не знаю, почему я получил downvoted, пожалуйста, дайте мне знать, что я сделал неправильно ...

Вот пример вывода:

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 ints, не следует ли читать их назад, как я писал? –

+0

Кажется, что вы вводите 3 символа, '2', пробел и' 4' (затем введите) - так что вы читаете два символа '2' и символ пробела. Если вы ввели '2',' 2', пробел, '4' и' 1', затем введите), то есть строка '22 41', ваши два чтения будут читать два символа' 2'. Итак, что вы ожидаете *? –

ответ

2

Проблема заключается здесь:

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

Здесь не следует использовать Read. Read читает один символ и преобразует его в соответствующее значение 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

 Смежные вопросы

  • Нет связанных вопросов^_^