格式化字符、ASCII码和输入输出方法之间的区别

 自己学习整理的笔记,方便以后回忆复习,有什么不对的地方大家多多指正

格式化字符

using System;

namespace proj2_1
{
    class Program
    {
        static void Main(string[] args)
        {
        int i = 65
        double d = 66.3456
        char c = 'A'

        Console.WriteLine("i={0:d5}, d={1:f}, c={2}", i, d, c);
        }
    }
}

如上 C# 实例中,Console.WriteLine中的{0:d5}和{1:f}是格式化字符串的一部分,用于指定输出的格式

其中{0} ,{1}是占位符,{0}表示后面要格式化输出的第一个参数(在这里是 i ),{1}表示后面要格式化输出的第二个参数(在这里是 d )

 d5 和 f 是格式说明符,其中 d 表示将数值格式化为十进制整数,5 表示输出的结果为 5 位,如果实际数字的位数不足5 位,在左边用0补齐,如果实际数字的位数大于等于 5 位,则按实际位数输出,例如,如果 i 的值为 12,将会输出00012,如果 i 的值为 123456,将会输出123456;
f 表示将数值格式化为浮点型小数,如果字母后加数字,则表示小数点后的数字位数,不足用0补齐,超出则四舍五入至设定的小数点后数字位数,如果字母后不加数字限定小数部分位数,一般会保留两位小数,不足用0补齐,超出则四舍五入至两位小数

注意:格式化字符N与F是有区别的,如果使用格式化N,输出结果的整数部分从个位开始每三位(千倍)自动增加逗号,而格式化F是没有逗号的
比如:double d=12345.6789;
格式化N3的结果字符串为:12,345.679
格式化F3的结果字符串为:12345.679,没有千分号

代码实例讲解可在原文章了解C#格式化小数N与F的区别_c# f3-CSDN博客 

补充: 同样是规定输出字符位数,{0,5:d} 和 {0:d5} 是不一样的,前者位数不足用空格填充,后者用 0 填充,如上例前者为_ _ _ 65 (用 _ 模拟空格) ,而后者为00065

然后我就好奇 f 字符超出会不会也一样,经过测试确实有不一样的地方
根据上例代码这里举例 {1,9:f8} 和 {1:f9},前者位数不足同样用空格填充,不过这里不一样的是这个数字包括整数和小数部分,还有小数点,是的你没看错,小数点也算一位,而且!若设置数字小于实际位数则没有影响,若大于实际位数,则超出的位数将会在整数部分用空格补齐;后者如之前介绍用 0 填充;如上例代码前者为_ _ 66.3456 (用 _ 模拟空格) ,而后者为66.345 600 000
感兴趣的活其他字符大家自己去测试,我这里就不过多测试和赘述了

而这个特性的用处之一,就是可以让输出的数字、字符等更规范整齐

等一下,又发现一个,如 {0,-4} ,- 表示左对齐,即从右边填充补齐,其他则没有变化,但只适用 {0,-4} 这类,不适用 {0:d-4} ,会没有数值,直接显示d-4

再提一下,科学计数法的 E 表示的是10的n次方,后面跟的数字为几,则数字乘10的几次方,如果E后加了正负号,则表示±n次方,比如E-2,表示10的-2次方
其表现形式有三种,都表示一个意思,这里举例123.456 ,可以表示为1.23456E2;1.23456E+2;1.23456E+002

在网上刷到别人整理的格式化字符,比较规范更方便理解,大家可以学习一下,原文在这[转]C#之Console.Write()和Console.Read()及Console.Readline()的问题-CSDN博客
以下为引用部分:
Console.Write()方法输出的格式项采用 {x,y:z} 的格式,各项说明:
x:索引组件
强制“索引”组件(也叫参数说明符)是一个从0开始的数字,可标识值列表中对应的元素。也就是说,参数说明符为0的格式项格式化参数列表中的第一个值,参数说明符为1的格式项格式化参数列表中的第二个值,依次类推。每一个格式项都可以引用所有的参数。例如,如果有三个值,则可以通过指定类似于“{1}{0}{2}”的源字符串来格式化第二、第一和第三个值。格式项未引用的值会被忽略。如果参数说明符指定了超出值列表范围的项,将导致运行时异常
y:对齐组件
可选的“对齐”组件是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”为负数,字段的格式化数据为左对齐。如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号
z:格式字符串组件
可选的“格式字符串”组件由标准或自定义格式说明符组成。如果不指定“格式字符串”,则使用常规“G”格式说明符。如果指定“格式说明符”,则需要使用冒号

ASCII码

先简单介绍一下ASCII码,中文全称为“美国信息交换标准代码”,使用7位二进制数(0~127)表示128个字符,使用一个字节存储,其大致可分为控制字符和可打印字符

控制字符
:ASCII码值在0~31和127的字符,通常不会显现出来,用于通信和控制
可打印字符:ASCII码值在32~126的字符,可以直接显示在屏幕上
空格(32);数字0-9(48~57);大写字母A-Z(65~90);小写字母a-z(97~122);标点符号和特殊符号(33~47,58~64,91~96,123~126)
当然单纯的ASCII码肯定不够用,所以有各种扩展,大家自行了解

输入方法Console.Read、Console.ReadLine、Console.ReadKey的区别

Console.Read方法:用于读取用户输入的单个字符或字符串的第一个字符,其返回字符在ASCII 码对应的数值,返回值为 int 值类型,比如输入 W 或 WaSd,都返回 W 的 ASCII 码值 87

Console.ReadLine方法:用于从控制台读取用户输入并返回字符串string类型,直到找到换行符。比如输入 W 或 WaSd,将原样返回字符串 W 或 WaSd,如果希望从用户读取字符或数字值等其他类型,则需要通过类型转换,将字符串转换为适当的数据类型

两者特殊关联:Console.Read方法会读取输入的字符,包括换行符或回车,但是不处理。例如输入 W,再点按回车,这时候 Console.Read(); 会将 W 和回车都读取,但只输出W的ASCII码值87,回车不做处理
1. 所以,当 Console.Read(); 的后面又有 ReadLine(); 时,Console.Read(); 运行完会直接将输入的回车传给 ReadLine();,导致 ReadLine(); 读取后输出空行然后结束,因此结果运行表现出只给 Console.Read(); 输入,运行完输出ASCII码值后,ReadLine(); 还没输入,直接显示空行然后结束,看起来就像 ReadLine(); 被“跳过”一样
通俗点就是在 read() 输入的内容,以输入回车(换行)为结束,但这个换行不会被 read() 处理,而留给了 readline(),这时候 readline() 看见回车,就以为这行结束了
2. 当然,当 Console.Read(); 的后面有 Console.Read(); 时,后面的 Console.Read(); 也是读取到前者传入的回车,但是其会输出回车对应的ASCII码值13,然后直接结束
3. 而Console.ReadLine方法后跟两个中任何一个都不会有影响
4. 当什么都不输入时,单点回车,Console.Read方法会输出回车对应的ASCII码值13;Console.ReadLine方法输出空行

Console.ReadKey方法:用于获取下一个字符,或者用户按任意键退出程序

输出方法‌Console.Write、Console.WriteLine的区别

两者的区别主要在于输出格式的不同:
‌Console.Write‌:输出字符串到控制台中,且在最后位置不换行,参数至少有一个以上
‌Console.WriteLine‌:输出字符串到控制台中,且在最后位置换行,有无参数均可,若没有参数,则为空行

使用场景和示例
‌Console.Write‌:当你需要在同一行内连续输出多个字符串时,可以使用Write。例如,输出一个长字符串时,希望内容在同一行显示,而不是每输出一部分就换行
‌Console.WriteLine‌:当你需要每条信息独立显示在每一行时,使用WriteLine。例如,在打印菜单、错误信息或提示时,通常希望每条信息占据一行

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值