устранить разрыв строки после чтения в C # - PullRequest
0 голосов
/ 30 августа 2018
using A = System.Console;
public void point()
{
    int hour, minute;
    A.Write("Enter Time (HH:MM) = ");
    hour = A.Read();
    A.Write(":");
    minute = A.Read();
}

Я хочу, чтобы это было похоже на

«Ввод времени (ЧЧ: ММ) = 12 (часовой ввод): 49 (минутный ввод)»

но оно приходит как

"Ввод времени (ЧЧ: ММ) = 12 (часовой ввод)
: 49 (минутный ввод)

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Предполагая, что A является Консолью, вы можете сделать так:

    static void Main()
    {
        int hour, minute;
        char[] hourChars = new char[2];
        Console.Write("Enter Time (HH:MM) = ");
        hourChars[0] = Console.ReadKey().KeyChar;
        hourChars[1] = Console.ReadKey().KeyChar;
        var hourString = new String(hourChars);
        hour = int.Parse(hourString);
        Console.Write(":");
        minute = Console.Read();
    }
0 голосов
/ 30 августа 2018

Самый простой способ (при условии, что вы читаете из консоли, и пользователь введет час, затем нажмите Enter, затем введите минуты и нажмите Enter):

static void Main(string[] args)
        {
            int hour = 0, minute = 0;
            const int MAX_NUMBER_OF_DIGITS = 2 ;

            Console.Write("Enter Time (HH:MM) = ");

            // store cursor position
            int cursorLeft = Console.CursorLeft;
            int cursorTop = Console.CursorTop;

            // use ReadLine, else you will only get 1 character 
            // i.e. number more than 1 digits will not work
            hour = int.Parse(Console.ReadLine());

            Console.SetCursorPosition(cursorLeft + MAX_NUMBER_OF_DIGITS , cursorTop);

            Console.Write(":");

            minute = int.Parse(Console.ReadLine());

            // Nitpickers! purposefully not using String.Format, 
            // or $, since want to keep it simple!
            Console.Write("You entered: " + hour + ":" + minute);
        }

Выход:

Введите время (ЧЧ: ММ) = 17: 55

Вы ввели: 17: 55

Хотя я бы лучше порекомендовал вам лучший и менее подверженный ошибкам способ, подобный этому (где пользователь вводит ЧЧ: ММ и нажимает Enter один раз, то есть вводит одну строку, включая :, то есть двоеточие) :

static void Main(string[] args)
{
    int hour = 0, minute = 0;

    Console.Write("Enter Time in format HH:MM = ");

    string enteredNumber = Console.ReadLine();

    string[] aryNumbers = enteredNumber.Split(':');

    if (aryNumbers.Length != 2)
    {
        Console.Write("Invalid time entered!");
    }
    else
    {
        hour = int.Parse(aryNumbers[0]);
        minute = int.Parse(aryNumbers[1]);

        // Nitpickers! purposefully not using String.Format, 
        // or $, since want to keep it simple!
        Console.Write("You entered: " + hour + ":" + minute);

    }
}
0 голосов
/ 30 августа 2018

Предполагая, что A является стандартным c # Console, тогда вы можете использовать ReadKey вместо Read

ReadKey будет читать только один символ за раз, но это не заставит вас нажать Enter, что является причиной для новой строки.

    static void Main()
    {
        char h1, h2, m1, m2;
        Console.Write("Enter Time (HH:MM) = ");
        h1 = Console.ReadKey().KeyChar;
        h2 = Console.ReadKey().KeyChar;
        Console.Write(":");
        m1 = Console.ReadKey().KeyChar;
        m2 = Console.ReadKey().KeyChar;
    }

Я оставлю фактическое значение в качестве упражнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...