Как написать в текущей строке консоли? - PullRequest
1 голос
/ 24 января 2012

Я пишу консольное приложение, и мне нужно знать, как писать в текущей строке со смещением строк. Я пытаюсь объяснить это на следующем примере: Пусть It поддерживает строки с их номерами и содержимым вместе с позицией курсора.

  1. Hello! * * 1004
  2. Это моя командная оболочка.
  3. Пожалуйста, напишите что-нибудь: _

Когда я называю свой метод для записи в тексте консоли "lalala", я хочу видеть, что:

  1. Hello!
  2. Это моя командная оболочка.
  3. Лалала
  4. Пожалуйста, напишите что-нибудь: _

Если я использую метод Console.WriteLine, я вижу следующее:

  1. Hello!
  2. Это моя командная оболочка.
  3. Пожалуйста, напишите что-нибудь: lalala
  4. _

Пожалуйста, помогите мне реализовать эту функцию.

Ответы [ 7 ]

3 голосов
/ 24 января 2012

Console.SetCursorPosition - это яд, который вы ищете.Подробнее о http://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspx

3 голосов
/ 24 января 2012

Поскольку вы не предоставили никакого кода, я предполагаю, что вы используете Console.WriteLine("Please write something"); для распечатки текста.Так как это добавит \ n к тексту, который вы хотите напечатать, вы должны использовать Console.Write("Please write something"), а затем Console.ReadLine();, чтобы получить ввод и обработать \ n самостоятельно.

2 голосов
/ 24 января 2012
Console.WriteLine("1.Hello!");
Console.WriteLine("2.This is my command shell.");
Console.WriteLine("3.lalala");
Console.Write("4.Please write something:");
Console.Read();
1 голос
/ 11 февраля 2012

попробуйте что-то вроде этого

Console.Write("Hello\nThis is My Command Shell\nlalala\nPlease Enter Something:___");

, если курс, который в конечном итоге приведет к тому, что они все появятся одновременно, но если вам это удастся, будет работать

Будет выглядеть так

console application

1 голос
/ 24 января 2012

Пожалуйста, найдите код для вышеописанного сценария:

private static void ReadAndWriteToConsole()
    {
        var mystrings = new List<string>();

        mystrings.Add("Hello!");
        mystrings.Add("This is my command shell.");

        var input = WriteToConsole(mystrings);
        while (input.ToLower() != "exit")
        {
            mystrings.Add(input);
            Console.Clear();
            input = WriteToConsole(mystrings);
        }
    }

    private static string WriteToConsole(IEnumerable<string> variables )
    {
        foreach (var str in variables)
        {
            Console.WriteLine(str);
        }
        Console.Write("Please write something:");
        return Console.ReadLine();
    }

Надеюсь, это поможет.

ПРИМЕЧАНИЕ. Если вы хотите указать номер каждой строки, используйте цикл for вместо foreach ипросто напечатайте переменную, используемую в console.writeline.

1 голос
/ 24 января 2012

Если я правильно понял ваш вопрос, думаю, вам нужно использовать

Console.Write("text"); 

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

Вместо:

Console.WriteLine("text");

Это создаст новую строку в консоли каждый раз, когда она вызывается.

0 голосов
/ 12 декабря 2014

Я понимаю, что это старый вопрос, однако я искал этот материал, и вот как он может быть закодирован:

Console.WriteLine("Hello!");
Console.WriteLine("This is my command shell.");
string text = "";
string toWrite = "Please write something: ";
while (text != "quit")
{
    Console.Write(toWrite);
    text = Console.ReadLine();
    Console.SetCursorPosition(0, Console.CursorTop - 1);
    Console.WriteLine(text.PadRight(text.Length + toWrite.Length));
}

Console.SetCursorPosition помещает курсор назад на строку, которая былазаписать в, затем переписать то, что написано с текстом и дополнением, эквивалентным количеству символов в тексте.

...