[转]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();里直接输入回车,不能输入,直接结束了,看起来就像这句被“跳过”……

 

 


posted @ 2012-04-03 19:33  KIWI BIRD  阅读(11462)  评论(0编辑  收藏  举报