如何在用户写的同一行中写?

时间:2018-10-13 15:37:20

标签: c#

用户输入数字,程序应通过写“-” *数字中的数字量来制作侧面图,但会在用户输入下写“-”一行

电流输出: the output I get

预期输出:
the output I want to get

static void Main(string[] args)
{
    int num1, num2;
    Console.WriteLine("how many numbers will you want to enter?");
    num1 = int.Parse(Console.ReadLine());
    Console.WriteLine("Enter " + num1 + " numbers");
    for(; num1 > 0; num1--)
    {
        num2 = int.Parse(Console.ReadLine());
        Hi(num2);
    }
}
static void Hi(int num)
{
    while(num != 0)
    {
        num /= 10;
        Console.Write("-");
    }
    Console.WriteLine()
}

3 个答案:

答案 0 :(得分:3)

您可以在控制台中获取并设置光标位置,因此,如果您记得在用户按Enter键输入数字之前光标所在的行,则可以将光标重新放置在该行上。

另外,要打印输入长度的短划线,输入的数字也不必是数字(否则您已经检查过了)。

类似这样的东西应该合适:

static void Main(string[] args)
{
    Console.Write("How many numbers will you want to enter? ");
    int num1 = int.Parse(Console.ReadLine());
    Console.WriteLine("Enter " + num1 + " numbers");
    for (; num1 > 0; num1--)
    {
        int currentLine = Console.CursorTop;
        string num2 = Console.ReadLine();
        Console.SetCursorPosition(20, currentLine);
        Console.WriteLine(new string('-', num2.Length));
    }

    Console.WriteLine("\r\n(Press enter to leave program.)");
    Console.ReadLine();
}

示例输出:

How many numbers will you want to enter? 4
Enter 4 numbers
1                   -

435                 ---
What happens long wi-----------------------

(Press enter to leave program.)

答案 1 :(得分:1)

使用如下方法:

public string getKeyBuffer()
{
    string buffer = "";
    do
    {
        var charIn = Console.ReadKey(true);
        if (charIn.Key == ConsoleKey.Enter) break;
        buffer += charIn.KeyChar;
        Console.Write(charIn.KeyChar);

    } while (true);
    return buffer;
}

这将回显每个按下的键,然后在用户按下enter键时返回所有按下的键,而不会回显enter键。

答案 2 :(得分:0)

最好的解决方案是写除控制台之外的其他内容,您可以在其中完全控制显示的内容和位置。

另一种解决方案是格式化代码中的字符串,然后清除控制台并每次编写整个内容。

另一种解决方案是跟踪您的位置并使用Console.SetCursorPosition移动控制台光标。但是,鉴于存在更好的输出替代方案,这很少是令人满意的解决方案。

您可以使用Console.CursorTop--;将光标向上移动一行,而不必跟踪您所在的行。