Принимает ли Console.Read() первую цифру в качестве ввода, когда введено двузначное число?

Я новичок в C#. Итак, я тренировался, написав несколько простых кодов. Я решил написать код, в котором пользователь будет вводить число, и тот же номер будет показан в качестве вывода. Я написал следующий код, и он работал отлично.

Однако, когда я решил заменить Console.Readline() на Console.Read(), чтобы посмотреть, что будет выводом, и запустил код, я обнаружил, что вывод - это код ASCII первой цифры введенного мной числа., [То есть, когда я ввел 46, результат был 52.]

Принимая во внимание, что когда я использовал Console.ReadLine(), было показано все двухзначное число.

По моему мнению, не должно ли быть так, что Console.Read() отображает только первую цифру введенного числа, а Console.ReadLine () показывает полное число?

using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int num1;
            Console.Write("Enter a number:");
            num1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("The number is: " + num1);
            Console.ReadKey();

        }
    }
}

1 ответ

Решение

Из документации, Console.Read возвращает:

Следующий символ из входного потока или отрицательный (-1), если в данный момент больше нет символов для чтения.

как int,

int является значением ASCII прочитанного символа. Вы просто должны бросить char чтобы получить характер:

int characterRead = Console.Read();
if (characterRead != -1) {
    char c = (char)characterRead;

    // if you want the digit as an int, you need
    int digit = Convert.ToInt32(c.ToString());
}

Также обратите внимание, что второй звонок Console.Read прочтем вторую цифру Если вы хотите пропустить это, вам нужно позвонить Console.ReadLine очистить все, что не прочитано.

Другие вопросы по тегам