如何在.NET 3控制台应用程序的印刷行中间获取输入

独特

我的问题很简单,但是我似乎找不到一个简单的答案,就这一点而言根本没有答案。

我想要做的是打印一个问题,然后有一个答案字段,然后在不等待输入的情况下写出更多文本:

This is a program that solves second degree equations using this formula ax*x + bx + c = d
write your numbers! {WHERE I WANT TO WRITE AND GET INPUT}x*x + bx+ c = d

{WHERE I WANT TO WRITE AND GET INPUT}在应用程序运行时了我想写的地方,然后获取了输入,因此应用程序可以开始做数学了!

注意:在控制台程序的上下文中,术语“光标”是指控制台文本的插入符号或插入点,而不是指您的鼠标指针。


您可以Console.SetCursorPosition用来控制将文本写入控制台的位置,但是它带有许多警告:

即,您将需要使用Console.CursorTopConsole.CursorLeft(或Console.GetCursorPosition在.NET 5上)获取当前光标位置这样一来,您就可以在打印字段时知道光标在哪里-因为控制台缓冲区(其大小可以与窗口不同)可以在任何时候被用户调整大小-这也是为什么许多控制台程序输出乱码的原因调整大小时的文本(如果它们不能正确控制光标位置)。

这是您的问题的示例实现:数学表达式中的占位符。请注意,每个占位符只能插入单个字符(由下划线字符表示)。如果要使占位符随着输入更多数字而动态扩展,那么这是读者的一项练习(提示:使用来重新打印该行\r)。

        static void Main( string[] args )
        {
            const String line1 = "This is a program that solves second degree equations using this formula ax*x + bx + c = d";
            const String line2 = "write your numbers! _x*x + _x+ _c = d";

            // HACK:
            if( Console.BufferWidth < line2.Length )
            {
                Console.WriteLine( "Please resize your console window to {0} columns and restart this program.", line2.Length );
                return;
            }

            Console.WriteLine( line1 );
            Console.WriteLine( line2 );

            // Get the character indexes of the placeholders:
            Int32 pos1 = line2.IndexOf( '_' );
            Int32 pos2 = line2.IndexOf( '_', pos1 + 1 );
            Int32 pos3 = line2.IndexOf( '_', pos2 + 1 );
            Int32 pos4 = line2.IndexOf( 'd', pos3 + 1 );

#if NET5_0
            (Int32 x, Int32 y) = Console.GetCursorPosition();
#else
            Int32 x = Console.CursorLeft;
            Int32 y = Console.CursorTop;
#endif

            // Curiously, `y` is 2 for the second line (implying base 1), but SetCursorPosition uses base 0, so adjust it:
            y = y - 1;

            // Assuming the placeholders are on the same line without any wrapping:
            Console.SetCursorPosition( left: pos1, top: y );

            Int32? a = ReadDigit();
            if( a == null ) return;

            Console.SetCursorPosition( left: pos2, top: y );

            Int32? b = ReadDigit();
            if( b == null ) return;

            Console.SetCursorPosition( left: pos3, top: y );

            Int32? c = ReadDigit();
            if( c == null ) return;

            // Compute 'd':
            Double d = 1234;// SolveQuadradicFormula( a, b, c );

            // Move cursor where the 'd' is:
            Console.SetCursorPosition( left: pos4, top: y );

            // Then write the value of d:
            Console.Write( d );
            Console.WriteLine();
        }

        private static Int32? ReadDigit()
        {
            do
            {
                ConsoleKeyInfo key = Console.ReadKey();
                if( Char.IsDigit( key.KeyChar ) )
                {
                    return key.KeyChar - '0';
                }
                else if( key.Key == ConsoleKey.Escape )
                {
                    return null;
                }
            }
            while( true );
        }

屏幕截图证明:

等待用户输入:

在此处输入图片说明

按下1键盘后:

在此处输入图片说明

然后,在按下2键盘后:

在此处输入图片说明

然后,按下3我的键盘(它也显示的值d,这只是1234:现在是假的占位符值):

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在.Net控制台应用程序中获取承载令牌?

来自分类Dev

如何从提供程序(C#.NET Core控制台应用程序)获取Args?

来自分类Dev

如何在 .Net Core 控制台应用程序中引用 .Net Core 库

来自分类Dev

如何从.NET生成独立的控制台应用程序

来自分类Dev

如何获取.Net Core控制台应用程序.exe文件所在目录的路径?

来自分类Dev

在VB.NET控制台应用程序中,如何从My.Settings对象获取应用程序的设置?

来自分类Dev

如何在asp.net控制台应用程序中使用依赖项注入?

来自分类Dev

如何在.NET Framework的控制台应用程序中创建通知?

来自分类Dev

如何在.NET Core控制台应用程序中设置DI容器?

来自分类Dev

如何在.net中以Web形式转换控制台应用程序?

来自分类Dev

如何在.NET Core控制台应用程序中实现MVVM?

来自分类Dev

.NET C#控制台应用程序如何从生产环境中获取更详细的异常信息

来自分类Dev

如何使.net Core 3.1控制台应用程序中的控制台记录器正常工作

来自分类Dev

如何在ASP.NET Core 1.0中显示Web应用程序的LoggerFactory日志控制台?

来自分类Dev

如何在.NET 5.0控制台应用程序上的C#中检查Windows版本

来自分类Dev

如何在Web应用程序ASP.net MVC中嵌入C#.net控制台应用程序

来自分类Dev

C#.NET控制台应用程序获取键盘输入

来自分类Dev

如何构建在.NET CoreCLR上运行的hello-world控制台应用程序?

来自分类Dev

如何使用C#在内存中执行.NET控制台应用程序?

来自分类Dev

如何从Visual Studio 2013调试.NET控制台应用程序

来自分类Dev

如何使Log4Net写入控制台应用程序中的EventLog?

来自分类Dev

.NET Core控制台应用程序如何部署到Kubernetes?

来自分类Dev

如何从.net应用程序禁用到Spark控制台的所有日志记录信息

来自分类Dev

如何使用C#在内存中执行.NET控制台应用程序?

来自分类Dev

如何从Visual Studio 2013调试.NET控制台应用程序

来自分类Dev

如何保持.NET控制台应用程序不循环运行?

来自分类Dev

ASP.NET 5控制台应用程序(程序包)-如何从连接字符串创建DBContext?

来自分类Dev

如何在.NET Core RC2控制台应用程序(Linux,Debian 8)中使用System.Data?

来自分类Dev

当模型使用DataAnnotations包含另一个类的对象作为属性时,如何在控制台应用程序的.Net Core 3.1中验证模型?

Related 相关文章

  1. 1

    如何在.Net控制台应用程序中获取承载令牌?

  2. 2

    如何从提供程序(C#.NET Core控制台应用程序)获取Args?

  3. 3

    如何在 .Net Core 控制台应用程序中引用 .Net Core 库

  4. 4

    如何从.NET生成独立的控制台应用程序

  5. 5

    如何获取.Net Core控制台应用程序.exe文件所在目录的路径?

  6. 6

    在VB.NET控制台应用程序中,如何从My.Settings对象获取应用程序的设置?

  7. 7

    如何在asp.net控制台应用程序中使用依赖项注入?

  8. 8

    如何在.NET Framework的控制台应用程序中创建通知?

  9. 9

    如何在.NET Core控制台应用程序中设置DI容器?

  10. 10

    如何在.net中以Web形式转换控制台应用程序?

  11. 11

    如何在.NET Core控制台应用程序中实现MVVM?

  12. 12

    .NET C#控制台应用程序如何从生产环境中获取更详细的异常信息

  13. 13

    如何使.net Core 3.1控制台应用程序中的控制台记录器正常工作

  14. 14

    如何在ASP.NET Core 1.0中显示Web应用程序的LoggerFactory日志控制台?

  15. 15

    如何在.NET 5.0控制台应用程序上的C#中检查Windows版本

  16. 16

    如何在Web应用程序ASP.net MVC中嵌入C#.net控制台应用程序

  17. 17

    C#.NET控制台应用程序获取键盘输入

  18. 18

    如何构建在.NET CoreCLR上运行的hello-world控制台应用程序?

  19. 19

    如何使用C#在内存中执行.NET控制台应用程序?

  20. 20

    如何从Visual Studio 2013调试.NET控制台应用程序

  21. 21

    如何使Log4Net写入控制台应用程序中的EventLog?

  22. 22

    .NET Core控制台应用程序如何部署到Kubernetes?

  23. 23

    如何从.net应用程序禁用到Spark控制台的所有日志记录信息

  24. 24

    如何使用C#在内存中执行.NET控制台应用程序?

  25. 25

    如何从Visual Studio 2013调试.NET控制台应用程序

  26. 26

    如何保持.NET控制台应用程序不循环运行?

  27. 27

    ASP.NET 5控制台应用程序(程序包)-如何从连接字符串创建DBContext?

  28. 28

    如何在.NET Core RC2控制台应用程序(Linux,Debian 8)中使用System.Data?

  29. 29

    当模型使用DataAnnotations包含另一个类的对象作为属性时,如何在控制台应用程序的.Net Core 3.1中验证模型?

热门标签

归档