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的字符,也就是我们想要的年份信息。