Новый программист C # озадачен.Очень простая программа.Приведение int к байтовому формату работает, но не так, как я ожидал - PullRequest
0 голосов
/ 09 октября 2018

Это формулировка упражнения.

** Создайте консольное приложение, которое запрашивает у пользователя два числа в диапазоне 0-255, а затем делит первое число на второе:

Введите число от 0 до 255: 100

Введите другое число от 0 до 255: 8

100, разделенное на 8, равно 12

Напишите обработчики исключений, чтобы перехватить любойвыданные ошибки:

Введите число от 0 до 255: яблоки

Введите другое число от 0 до 255: бананы

FormatException: Входная строка была в неправильном формате.**

Это программа, которую я написал, она работает.Но я намеревался сделать его короче, написав результат байта = делитель / делимое;

И делитель, и дивиденд уже были отлиты как байт, так почему я не могу использовать их непосредственно вкод?

Я должен был вычислить операцию, используя int, а затем преобразовать это int в байт .(2 шага вместо одного, что меня озадачивает)

Я что-то упустил?

static void Main(string[] args)
    {
        checked
        {
            try
            {
                WriteLine("Enter a number between 0 and 255");
                string firstNumber = ReadLine();
                byte divisor = Convert.ToByte(firstNumber);
                WriteLine("Enter another between 0 and 255");
                string secondNumber = ReadLine();
                byte dividend = Convert.ToByte(secondNumber);
                int calculation = divisor / dividend;
                byte result = Convert.ToByte(calculation);
                WriteLine($"The result of the division between {divisor} and {dividend} is {result}");
            }
            catch (OverflowException)
            {
                WriteLine("The number you entered is either lower than 0 or superior to 255, please enter a number between 0 and 255");
            }
            catch (FormatException)
            {
                WriteLine("You didn't enter a number");
            }
            catch (Exception ex)
            {
                WriteLine($"{ex.GetType()} says {ex.Message}");
            }
        }

        ReadKey();
    }

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы можете разыграть его:

byte calculation = (byte)(divisor / dividend);

См. Эту ссылку для получения более подробной информации: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/byte

0 голосов
/ 09 октября 2018

Это потому, что byte не определяет никаких арифметических операторов.

Код для divisor / dividend является эквивалентом (int)divisor / (int)dividend, поэтому вы получаете ошибку, если пытаетесь сохранить результат вa byte.

То, что вы делаете, правильно, или, альтернативно, напишите byte calculation = (byte)(divisor / dividend);

...