Как с помощью Console.Read() получить два числа

мой вопрос заключается в том, как использовать два числа с помощью Console.Read(). Когда я запускаю код

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    {
        class Program
        {
            static void Main(string[] args)
            {
                int number1, number2, temp;

                Console.WriteLine("Enter the first number:\n");
                number1 = Console.Read();                       
                Console.WriteLine("\nEnter the Second number:\n");       
                number2 = Console.Read();
                Console.WriteLine("\nBefore swap, number1={0}, number2={1}\n", number1, number2);        
                temp = number1;
                number1 = number2;
                number2 = temp;
                Console.WriteLine("\nAfter swap, number1={0}, number2={1}\n", number1, number2);
            }
        }
    }

он позволяет ввести только один номер, а затем вывести текущие результаты:

Enter the first number:
12
Enter the Second number:

Before swap, number1=49, number2=50;
After swap, number1=50,number2=49;

Он не выполняет номер 1, который я ввел. Что означают эти 49,50?

Я также пишу другой код, он отлично работает:

         int number1, number2,temp;

       Console.WriteLine("Enter the first number:\n");
       number1 = Int32.Parse(Console.ReadLine());
       Console.WriteLine("\nEnter the Second number:\n");
       number2 = Int32.Parse(Console.ReadLine());
       Console.WriteLine("\nBefore swap, number1={0}, number2={1}\n", number1, number2);

       temp = number1;
       number1 = number2;
       number2 = temp;
       Console.WriteLine("\nAfter swap, number1={0}, number2={1}\n", number1, number2);

person Simona    schedule 20.08.2015    source источник
comment
Console не имеет функций для форматированного ввода. Используйте ReadLine() и обработайте строку.   -  person Henk Holterman    schedule 20.08.2015
comment
Я думаю, что если бы вы подождали между вводом 1 и 2, вы бы увидели, как появляется второе число Enter, которое подскажет вам, что 12 не принимается как один ввод, а как два отдельных нажатия клавиш.   -  person Adam V    schedule 20.08.2015


Ответы (2)


Console.Read() возвращает значение символа, а не введенное число. Кроме того, он возвращает только первый введенный символ. Хороший способ добиться того, что вы пытаетесь, - написать собственный метод для чтения числа с использованием Console.ReadLine(), например:

public static int ReadInt()
{
    string inputString = Console.ReadLine(); // Read the string
    int intValue;
    if (int.TryParse(inputString, out intValue)) // Try to parse the string, if it succeeds, it'll be put in intValue
    {
        return intValue;
    }
    return 0; // Invalid input, return 0 or something else
}
person Philippe Paré    schedule 20.08.2015

Проблема в том, что вы не используете Console.ReadLine в своем первом примере; вы используете Console.Read.

Первый Console.Read принимает один символ - в вашем случае 1. Согласно этой таблице ASCII, символ 1 соответствует (int) 49. Второй Console.Read аналогично занимает второй символ, 2, и преобразует его в 50.

person Adam V    schedule 20.08.2015