3.赋值忽略符
有时,用户的输入可能不符合预定的格式。
1 #include<stdio.h>
2 int main()
3 {
4 int year=0;
5 int month=0;
6 int day=0;
7 scanf("%d-%-d%-d",&year,&month,&day);
8 printf("%d %d %d\n",year ,month,day);
9 return 0;
10 }
上面示例中,如果用户输入2020-01-01,就会解读出年月日。问题是用户可能填写其他格式,比如2020/01/01,这种情况下,scanf()解析数据就会失败。
为了避免这种情况,scanf()提供了一个赋值忽略符(assignment suppression character)*。只要把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后就将被丢弃。
1 #include<stdio.h>
2 int main()
3 {
4 int year=0;
5 int month=0;
6 int day=0;
7 scanf("%d%*c%d%*c%d",&year,&month,&day);
8 printf("%d %d %d\n",year ,month,day);
9 return 0;
10 }
上面示例中,%*c就是在占位符的百分号后面,加入赋值忽略符*,表示这个占位符没有对应的变量,解读后不必返回。