zoukankan      html  css  js  c++  java
  • [转]C#之Console.Write()和Console.Read()及Console.Readline()的问题

     

    Console.Write()格式输出的格式项采用{x,y:z}的格式,各项说明:
    x:索引组件
    强制“索引”组件(也叫参数说明符)是一个从0开始的数字,可标识值列表中对应的元素。也就是说,参数说明符为0的格式项格式化参数列表中的第一个值,参数说明符为1的格式项格式化参数列表中的第二个值,依次类推。每一个格式项都可以引用所有的参数。例如,如果有三个值,则可以通过指定类似于“{1}{0}{2}”的源字符串来格式化第二、第一和第三个值。格式项未引用的值会被忽略。如果参数说明符指定了超出值列表范围的项,将导致运行时异常。

    y:对齐组件
    可选的“对齐”组件是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”为负数,字段的格式化数据为左对齐。如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号。这个对齐组件没用过,不熟悉。

    z:格式字符串组件
    可选的“格式字符串”组件由标准或自定义格式说明符组成。如果不指定“格式字符串”,则使用常规“G”格式说明符。如果指定“格式说明符”,需要使用冒号。

    在网上找了,如下:

    C 或 c 货币
    D 或 d 十进制
    E 或 e 科学型
    F 或 f 固定点
    G 或 g 常规
    N 或 n 数字
    X 或 x 十六进 制

    然后是Console.Read()的使用方法。

    Console.Read()的用法是从控制台读取字符,用户可以输入一个字符然后按回车键,也可以输入一串字符然后按回车键,回车键被按下之后,字符才被Console.Read()方法读取。被读取的除了键入的字符外,还包含一个换行和一个空行,所以下面的例子如果输入一个非n的字符并回车,程序将输出3行“not n”。并且这个方法的返回值是int类型,下面例子的第十二行如果不进行强制类型转换的话,编译器将会报错。

    using System;
    using System.IO;
    class test
    {
    public static void Main()
    {
    char getchar='y';

    while( getchar!='n' )
    {
    Console.WriteLine("not n");
    getchar=(char) Console.Read();
    Console.WriteLine("getchar is {0}",getchar);
    }
    }
    }
    Console.Read()方法是以字符做为参数,也就是说不论什么输入(即便是数字)都是作为字符处理的,而它的返回值是int类型,也就是说它返回相应的UNICODE码。比如输入d返回100,输入1返回49等等。

    但是看这个程序:

    using System;
    class myConsoleRead
    {
    public static void Main()
    {
    int mya=100;
    while(maya!="exit")

    {

    Console.Write("{0}\t",mya);
    mya=Console.Read();
    }
    }
    }

    下面是Console.Read()和Console.Readline()区分:

    //for:熟悉Console.read()&Console.ReadLine()的方法
    using System;
    class read_info
    {
    public static void Main(string[] args)
    {
    //Console.ReadLine()的方法
    Console.Write("请输入你的姓名:");//Console.Write()方法是不换行输出信息
    string s = Console.ReadLine();
    //此方法是读取输入的名字并把它存入到字符串s中;
    Console.WriteLine("Hi,{0}.Welcome",s);//Console.WriteLine()是先输出信息再换行
    //Console.read()方法
    Console.Write("请输入你的生日:");
    int i = Console.Read(); //不论输入的是单个字符还是一个字符串,均只输出第一个字符串
    Console.Write("您的生日是:{0}!",i);
    }
    }

    //Console.Read() Console.ReadLine()方法都是从键盘读入信息,唯一不同的就是Console.Read() 方法用于获得用户输入的任何值(可以是任何的字母数字值)的ASCII值.Console.ReadLine()呢?用于将获得的数据保存在字符串变量之中.

    read()时输入的内容,以回车(换行)为结束,而这个换行又不会被read()方法处理,而留给了readline(),这readline()看见回车,就觉得这行是结束了

    问题终于解决了,原来Console.Read();方法会读取输入的字符,包括换行符和回车,但是不处理,所以如果Console.Read();后面又有ReadLine();时,Console.Read();输入的回车会被ReadLine();读取,结果就相当于ReadLine();里直接输入回车,不能输入,直接结束了,看起来就像这句被“跳过”……


  • 相关阅读:
    POJ 2251 Dungeon Master(BFS)
    POJ 1321 棋盘问题 (DFS + 回溯)
    POJ 3009 Curling 2.0(DFS + 模拟)
    Codeforces 702D Road to Post Office(模拟 + 公式推导)
    Codeforces 702A Maximum Increase(dp)
    Codeforces 702C Cellular Network(二分)
    Codeforces 702B Powers of Two
    POJ 3083 Children of the Candy Corn (DFS + BFS + 模拟)
    POJ 2488 A Knight's Journey (回溯法 | DFS)
    POJ1094 Sorting It All Out (拓扑排序)
  • 原文地址:https://www.cnblogs.com/kiwi/p/2431203.html
Copyright © 2011-2022 走看看