none
C#的控制台数字输入的问题 RRS feed

  • 问题

  • 绝大部分编程语言首先就弄了一个数字输入,但是C#一直没有弄,在.NET FCL中有这么一个函数,确实很方便:

    Console.Write(string format, param object[] arg);

    但是为什么不弄了一个:

    Console.Read(string format, param object[] arg);

    C语言一的scanf很早就有这个功能了,而.NET已经发展到4.0了,还是不见踪影!我认为这个方法实现起来不是很难……难道是因为类型安全方面的考虑?没有这个功能,我输入数字只能用一些不优雅的方法:

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


    • 已更改类型 Flysha 2011年6月7日 23:07
    2011年6月7日 2:35

答案

  • 问题可以这样解决:

     

     

    [DllImport("msvcrt.dll")]
    public static extern int scanf(string format, __arglist);
    
    [DllImport("msvcrt.dll")]
    public static extern int printf(string format, __arglist);
    

     

    注意C#中有那个几个不为人所知的关键字,也让我纳闷很久,__arglist是对应C语言中的va_list,使用的时候应该同样也使用__arglist,下面是我自己写的一个demo,注意&a和&b可以用ref a、ref b来表示:

     

    using System.Runtime.InteropServices;
    
    namespace TestConsoleCS
    {
     class Program
     {
      [DllImport("msvcrt.dll")]
      public static extern int scanf(string format, __arglist);
    
      [DllImport("msvcrt.dll")]
      public static extern int printf(string format, __arglist);
    
      static void Main(string[] args)
      {
       int a = 0, b = 0;
       printf("Please enter a and b:\n", __arglist());
       scanf("%d%d", __arglist(ref a, ref b));
       printf("a + b = %d\n", __arglist(a + b));
      }
     }
    }
    • 已标记为答案 Flysha 2011年6月8日 4:42
    2011年6月8日 4:42

全部回复

  • 问题可以这样解决:

     

     

    [DllImport("msvcrt.dll")]
    public static extern int scanf(string format, __arglist);
    
    [DllImport("msvcrt.dll")]
    public static extern int printf(string format, __arglist);
    

     

    注意C#中有那个几个不为人所知的关键字,也让我纳闷很久,__arglist是对应C语言中的va_list,使用的时候应该同样也使用__arglist,下面是我自己写的一个demo,注意&a和&b可以用ref a、ref b来表示:

     

    using System.Runtime.InteropServices;
    
    namespace TestConsoleCS
    {
     class Program
     {
      [DllImport("msvcrt.dll")]
      public static extern int scanf(string format, __arglist);
    
      [DllImport("msvcrt.dll")]
      public static extern int printf(string format, __arglist);
    
      static void Main(string[] args)
      {
       int a = 0, b = 0;
       printf("Please enter a and b:\n", __arglist());
       scanf("%d%d", __arglist(ref a, ref b));
       printf("a + b = %d\n", __arglist(a + b));
      }
     }
    }
    • 已标记为答案 Flysha 2011年6月8日 4:42
    2011年6月8日 4:42
  •  

    Flysha,

    首先恭喜您解决了问题。

    其次,感谢您分享您的解决方案,这对于以后遇到一样问题的人将会很有帮助。

     

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月21日 4:56
    版主