Из MSDN:
Console.Read()
: считывает следующий символ из стандартного входного потока.
Когда вы вводите любое числовое значение c в консоль, Console.Read()
преобразуется в его значение в Юникоде.
Предположим, вы ввели 1 в консоль,
int num = Convert.ToInt32(Console.Read());
// + + This converts '1' to its unicode value i.e "49"
// + This will convert "49" to its integer value i.e 49
Теперь ваш num
содержит 49 вместо 1, и когда вы пытаетесь получить доступ к элементу массива с num
в качестве индекса, он ищет 49 вместо 1. Здесь вы получаете System.IndexOutOfRangeException
ошибку
int num = Convert.ToInt32(Console.Read()); //You entered 1, but 49 get stored in num
Console.WriteLine(days[num]); //days[num] = days[49] (IndexOutOfRangeException)
Чтобы исправить эту проблему, используйте Console.ReadLine()
или преобразуйте значение Unicode в его исходное значение
Используя Console.ReadLine()
:
...
int num = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(days[num]);
...
Альтернативный способ,
...
int num = Console.Read() - '0';
Console.WriteLine(days[num]);
...