欢迎来到天天文库
浏览记录
ID:57893852
大小:35.00 KB
页数:5页
时间:2020-09-02
《scanf格式控制字符串.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、scanf格式控制字符串%[][ReadingUndelimitedstrings]*Toreadstringsnotdelimitedbywhitespacecharacters,asetofcharactersinbrackets([])canbesubstitutedforthes(string)typecharacter.Thesetofcharactersinbracketsisreferredtoasacontrolstring.Thecorrespondinginputfieldisreadupto
2、thefirstcharacterthatdoesnotappearinthecontrolstring.Ifthefirstcharacterinthesetisacaret(^),theeffectisreversed:Theinputfieldisreaduptothefirstcharacterthatdoesappearintherestofthecharacterset.*Notethat%[a-z]and%[z-a]areinterpretedasequivalentto%[abcde...z].T
3、hisisacommonscanffunctionextension,butnotethattheANSIstandarddoesnotrequireit.举一些例子: 对于constchar*p="12232114687ABC12356"; sscanf(p,"%[123]",buf);//就把是'1'或'2'或'3'的字读读到buf中,直到遇到一个不是'1'且不是'2'且不是'3'的字符,于是执行后buf应该是"1223211"; %[123]等同于%[231],等同于%[321]……,列表
4、中的顺序是无所谓的; %[123]也等同于%[1-3]或%[3-1],也就是“1至3”,对于连续的字符列表这样写就很简单,比如%[a-z]等同%[abc…省略…z]; 想想看,%[3-14]应该等同于什么?是“3至14”吗?当然不是,因为[]中的是字符,而不是数字,所以%[3-14]应该等同于%[3214],等同于%[1234]; 同理,想只取字母,那就可以写成%[A-Za-z]; 如果列表的第一个字母是^,那么正好相反,比如%[^A-Za-z]的意思就是取字母之外的所有字符。 对于
5、字符串"abDEc123"如果想按照字母和数字读到两个字符串中就应该是"%[a-zA-Z]%[0-9]",buf1,buf2; 假如我想取一行字符,该怎么办?"%s"是不行的,因为%s遇到空白字符(空格、制表符、r、)就结束了,所以可以写成"%[^]%*c",%[^]的作用刚才讲过了,就是读之外的所有字符,也就是说读到为止,%*c的作用就是把去掉,否则再次读的时候一直遇到的都是; 所有对%s起作用的控制,都可以用于%[],比如"%*[^]%*c"就表示跳过一行,"%-
6、20[^]"就表示读取前20个字符。scanf/sscanf格式的特殊控制代码scanf中一种很少见但很有用的转换字符:[...]和[ ^...]。#includeint main() { char strings[100]; scanf("%[1234567890]",strings); printf("%s",strings);return 0; } 运行,输入:1234werew后,结果是:1234。通过运行可以发现它的作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取
7、该字符;如果一经发现不属于就结束提取。该方法会自动加上一个字符串结束符到已经提取的字符后面。 scanf("%[^1234567890]",strings); 它的作用是:如果一经发现输入的字符属于方括号内字符串中某个字符,那么就结束提取;如果不属于就提取该字符。该方法会自动加上一个字符串结束符到已经提取的字符后面。 注意:方括号两边不能空格,如:scanf("%[ 1234567890 ]",strings); scanf("%[ ^1234567890 ]",strings); 不让空格也会算在里面的。用这种
8、方法还可以解决scanf的输入中不能有空格的问题。只要用scanf("%[^]",strings); 就可以了。很神奇吧。ANSI C 标准向 scanf() 增加了一种新特性,称为扫描集(scanset)。 扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组。 扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。 例如,以
此文档下载收益归作者所有