c/c++使用scanf进行字符录入时的格式控制

scanf在从键盘输入字符中读取时本身就可以规定一定的格式,比如如果输入一个日期:2020/04/21,而我们想要保存的只有三个数字,那么我们可以使用这样的格式控制:

int year,month,day;
scanf("%d/%d/%d",&year,&month,&day);

但是如果我们想以字符串的形式保存年月日就比较麻烦了,因为分隔符/会被当作字符直接读取到变量year中,就不能够得到我们想要的结果,我们就需要使用更加丰富的格式控制形式了。
(1)使用%[…] 扫描字符集合
scanf ("%[59ac]",a) 可以实现只有方括号内的字符形式的字符才是合法的,即只有5,9,a,c才可以录入,遇到其余字符均视为终止符。
还有如下格式:
scanf ("%[1-9]",a);只有数字可以录入,其余字符视为终止符。
scanf ("%[a-zA-Z1-9]",a);
以及:

scanf ("%[^\n]",a)

^表示取非,除了换行以外的字符均可以被scanf读取,包括空格符。
(2)%5s 控制录入长度为5,后面若还有scanf,则从停止处开始录入
(3)%*可以忽略某次录入,只读取而不保存。
比如我们想要从输入流:birthday=2020/04/21中获取年份信息2020并保存,我们可以使用这样的格式控制:

int main(){
	char year[20];
	scanf ("%*[^=]=%4s",year);
	printf ("%s",year);
}

其中%*[^=]读取了等号前的字符并丢弃,%4s读取等号后面长度为4的字符,也就是我们想要的年份信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值