10_31 对10_28的补充:scanf的使用(1)

前言

scanf函数其实是我们学习编程语言时最常用的语句,奈何我学艺不精,有一些问题在打代码的时候才发现,在此分享下。

一、scanf的用法

scanf的基础用法其实老师在上课的时候都已经讲过,翻翻PPT就能搞定,下面我展示的时我在网络上学习scanf函数时的新发现以及一些类似左右对齐的易忘知识点。

1.*

int a = 0, b = 0, c = 0;
scanf("%d%*d%d", &a, &b, &c);
printf("a = %d\nb = %d\nc = %d", a, b, c);

结果:
在这里插入图片描述
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b,c无值可赋

int a = 0, b = 0, c = 0;
scanf("%d%d%*d", &a, &b, &c);
printf("a = %d\nb = %d\nc = %d", a, b, c);

结果:
在这里插入图片描述

当输入为:1 2 3时,把1赋予a,2赋予b,3被跳过,c无值可赋
若多输入一个%d

int a = 0, b = 0, c = 0;
scanf("%d%d%*d%d", &a, &b, &c);
printf("a = %d\nb = %d\nc = %d", a, b, c);

结果:
在这里插入图片描述
即c被赋予4

2..*

在查找时,以下链接是这样写的
【C语言】的%*d、%.*s等详解:
(有些地方这个网站不一定对,我在下文中以标出)
在这里插入图片描述
但是我实操之后发现,无论是VS2022还是CodeBlocks,scanf里的“%.*d” 的作用似乎是省略从本位开始后面所有的数字
例如

int a = 0, b = 0, c = 0,d = 0,e = 0,f = 0;
	scanf("%.*d%d%d%d%d%d", &a, &b, &c, &d, &e, &f);
	printf("a = %d\nb = %d\nc = %d\nd = %d\ne = %d\nf = %d", a, b, c, d, e, f);

在这里插入图片描述

int a = 0, b = 0, c = 0,d = 0,e = 0,f = 0;
	scanf("%d%.*d%d%d%d%d", &a, &b, &c, &d, &e, &f);
	printf("a = %d\nb = %d\nc = %d\nd = %d\ne = %d\nf = %d", a, b, c, d, e, f);

在这里插入图片描述

int a = 0, b = 0, c = 0,d = 0,e = 0,f = 0;
	scanf("%d%d%d%d%.*d%d", &a, &b, &c, &d, &e, &f);
	printf("a = %d\nb = %d\nc = %d\nd = %d\ne = %d\nf = %d", a, b, c, d, e, f);

在这里插入图片描述
也有人遇到了同样的问题
【C语言】%.*d在scanf()中的用法
目前尚未找到解释

注:以上两个符号对字符与字符串并不适用,可以自己试试看

printf

继续往下挖掘,我发现上面的两个符在printf里却又有不同的用法

(1)*

%*d
int a = 1234;
printf("a = %*d",10, a);

结果在这里插入图片描述
("a = %*d",n, a)中n大于a的位数时,会在打印a前置空格,直到使总位数=n。
而当n小于a的位数时,则会正常打印。

int a = 1234;
printf("a = %*d",2, a);

结果在这里插入图片描述
这让我想起了右对齐

int a = 1234;
printf("a = %10d", a);

好像结果也一样在这里插入图片描述

####%*f
在这里插入图片描述
好像并没有什么用处
在这里插入图片描述
在CodeBlocks里也一样

####%*s(又是一个在vs2022里实现不了的555)
在这里插入图片描述
在CodeBlocks里与%*d 相同

(2).*

%.*d
int a = 1234;
printf("a = %.*d",10, a);

结果在这里插入图片描述
("a = %.*d",n, a)中n大于a的位数时,会在打印a前置0,直到使总位数=n。
而当n小于a的位数时,则会正常打印。

int a = 1234;
printf("a = %.*d",2, a);

结果在这里插入图片描述

%.*f

作用与%.nf相同
在这里插入图片描述

重点%.*s

仍然得靠CodeBlocks实现
在这里插入图片描述
作用:截取前n位


总结

好累,今天刚打了班赛,明天还有四节,累鼠了
scanf先写到这里了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值