Печатать текст в той же строке, что и пользовательский ввод, с помощью консоли С#

Я пытаюсь использовать метод С# Console.ReadLine() для ввода данных пользователем с консоли, а затем печатать текст в той же строке.

Используемый код:

using System;

namespace Test {
    class Program {
        static void Main(string[] args) {
            Console.ReadLine();
            Console.Write(" out");
        }
    }
}

Чего я жду от консоли:

in out

Что на самом деле производится:

in
 out

Обратите внимание, что in здесь вводится в консоли.

Будем очень благодарны любой помощи. Спасибо!

-Крис

Вы уверены, что хотите использовать Console.Read(), а не Console.ReadLine()? learn.microsoft.com/en-us/dotnet/api/…

gunr2171 28.11.2022 01:47

Отвечает ли это на ваш вопрос? Разница между Console.Read() и Console.ReadLine()?

Jim G. 28.11.2022 01:52

@ДжимГ. Да и нет. Теперь я понимаю, что мне следует использовать Console.ReadLine(), но использование этого метода вместо Console.Read() дает те же результаты. Я отредактировал сообщение, чтобы отразить это.

chris.thorpe 28.11.2022 01:57

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

500 - Internal Server Error 28.11.2022 02:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что он автоматически повторяет пользовательский ввод, включая новую строку, когда нажата клавиша ввода. Таким образом, вы должны остановить его от повторения ввода и справиться с этим самостоятельно.

Вы можете сделать это, используя Console.ReadKey(Boolean) и передав true для перехвата ключа и записи его в вывод только в том случае, если это не ключ ввода.

Это будет выглядеть так:

using System;

namespace Test {
    class Program {
        static void Main(string[] args) {
            while (true) {
                var key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Enter) {
                    break;
                } else {
                    Console.Write(key.KeyChar);
                }
            }
            Console.WriteLine(" out");
        }
    }
}

Примечание: это, однако, не будет обрабатывать специальные клавиши, такие как Backspace или клавиши курсора, как может ожидать пользователь.

Klaus Gütter 28.11.2022 07:39

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