抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

限定输入长度

输入int类型时可以限定输入长度

1
2
3
int a;
scanf("%3d", &a);
//取前3个数字,转为int类型存储到a变量中

输入char类型

注意输入char字符类型时不能限定长度(注意是字符,不是字符串)

笔者目前能查到的信息给出的原因:语法规定,其实想一下也说得通,读取一个字符,总不能scanf(“%2c”)把两个字符塞到一个字符的空间里吧

输入指定长度字符串

1
2
char ss[20];
scanf("%5s", ss);

输入只有指定字符的字符串

scanf匹配特定字符的格式为:%[xxx],[ ]包围起来的是需要读取的字符集合

例如输入一个只含有 'x','y','z'的字符串

1
2
char ss[10];
scanf("%[xyz]", ss); // 输入xzab,则ss为xz,遇到a停止

注意,遇到其它字符就会停止输入

注意:xyz的顺序没有要求,输入yxz,zyx等是可以正常读入的

只含有大写字母

1
scanf("%[A-Z]", ss);

只含有小写字母

1
scanf("%[a-z]", ss);

只含有大小写字母

1
scanf("%[a-zA-Z]", ss);

只含有数字

1
scanf("%[0-9]", ss);

混合输入

例如要求输入的字符包括大小写字母以及空格

1
scanf("%[a-z A-Z]", ss);

其实就是在中间加一个空格,意思是空格也算匹配字符如果输入中有空格符也会被正常读取;

空格的位置不一定要放在中间,可以放在最前面,也可以放在最后面

不匹配某些字符

不匹配某些字符只需要在[ ]内的最前面加一个^就可以了

例1,遇到数字就停止(不包含数字)

1
scanf("%[^0-9]", ss);

例2,遇到换行符就停止,不包含换行符

1
scanf("%[^\n]", ss);

例3,遇到指定字符’a’, ‘c’, 'f’就停止

1
scanf("%[^acf]", ss);

丢弃读取到的字符

scanf() 允许把读取到的数据直接丢弃,不往变量中存放,具体方法就是在 % 后面加一个*

例如:将读取到的小写字母丢弃

1
scanf("%*[a-z]");  //因为丢弃了,所以不用放到一个变量中
1
2
3
int a, b;
scanf("%d%*[a-z]%d", &a, &b);
// 输入 123ajfjfdfm654,则a为123,b为654,中间的小写字母被忽略了

评论