printf和scanf

printf的转换说明

printf的类型输出

%d     有符号整数

%u     无符号整数

%x    16进制小写

%X    16进制大写

%g​     自动判断用普通方法还是科学计数法输出合适(不会显示多余的0)

%c      单个字符

%s      字符串

%p     指针​

 ​%%   会输出%(单个%不能达到输出%的目的)


printf的​修饰符

1."标记"

-        向前对其(向左对齐)​

+       符号显示

空格   前导空格​(如果规定了输出的最大位数不够的会用空格补全)

0        前道0(​如果规定了输出的最大位数不够的会用0补全)

#        (1.在与%0和%x一起使用时可以显示对应格式 2.在与%g一起用时可以防止结果后 的0被删除)

2."数字"       最小宽度​

例如 =  输出1会输出 “空格空格3”;​

​3.".数字“

与%e,%f, %lf一起使用用来规定小数点右边数字位数

与%g,%G一起使用,用来规定有效数字最大位数

与%一起使用表示带打印字符最大数量

scanf相关

​scanf_s为什么更安全?

​       因为scanf是不会进行边界检查的,所以允许在你当前写入的区域紧接着的区域被写入数据,那么在执行你自己的程序的时候可能会在超出你自己所用的区域之外的区域执行,也就是缓冲区溢出,而scanf_s只会允许你写入我规定大小的这么一块区域,在此区域的后面是不允许你进行操作的,也不会允许你运行之后区域的东西。也就防止了缓冲区溢出的问题。



scanf_s是不能自己进行类型转换的​

比如

int a,b,c

char f;​

1.scanf_s("%d",&a);

2.scanf_s("%d",&b);

3.scanf_s("%c",&f);

4.scanf_s("%d",&c);

输入:a123

首先第一个scanf_s会到输入缓冲区读取输入,它会读到a,但是他要读的是%d类型的所以会读取失败,a的值为空

接着第二个scanf​_s到缓冲区读取,他仍然会首先读到a但他需要的是%d的类型,所以b的值也为空

然后第三的scanf_s会读到a,而他需要的正是%c类型的所以它会将a读到f中f此时的值为a

再接着​​最后一个scanf_s会从a后面接着读,所以c的值被成功赋值为123.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值