没有合适的资源?快使用搜索试试~ 我知道了~
首页scanf/printf中%的使用方法
资源详情
资源评论
资源推荐

scanf/fscanf 的%[]和%n 使用方法
标准输入输出函数%[]和%n 说明符的使用方法
scanf fscanf,均从第一个非空格的可显示字符开始读起!
标准输入输出函数 scanf 具有相对较多的转换说明符,它常常作为入门级函数出现在各种
教材中。但奇怪的是,[]和 n 这两种都为 c89/c99 所规定的标准说明符却鲜少在大多数教材中出
现。虽然[]和 n 说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,
尤其是[]说明符。
众所周之,scanf 以空白字符为定界符,但如果输入的字符串是以其它字符为定界符的,
那怎么办?[]就是专门处理这个问题的转换说明符。[]转换说明符可以通过两种方式产生结果字
符集,如果第一个[字符右边没有抑扬符(^),那么处于[]之间的字符就是结果字符集,不在
其中的可输入字符都作为定界符;如果左边[符号紧靠一个抑扬符(^),那么意义相反,^和]
之间的字符是定界符,其余可输入字符是结果字符集。
在使用[]说明符之前,得先明白两个概念:一是扫描列表。扫描列表(scanlist)指的是包
含在[和]两个字符之间除紧靠左边[字符的抑扬符之外的字符,例如:
scanf("%[abcd]", ptr);
abcd 组成扫描列表。二是扫描字符集(scanset)。扫描字符集指的是结果字符集,例如上面
的例子,结果字符集就是 abcd。如果输入一个字符串“cbadkjf”,那么 ptr 得到的字符串是
cbad,kjf 三个字符都属于定界符,输入到 k 字符时输入字符串被截断,kjf 三个字符被留在
stdin 里面。如果带有抑扬符,例如:
scanf("%[^abcd]", ptr);
扫 描 列 表 仍 然 是 abcd , 但 扫 描 字 符 集 是 除 abcd 外 的 可 输 入 字 符 。 如 果 输 入 字 符 串
“jksferakjjdf”,ptr 得到的字符串是“jksfer”。如果想限制输入字符串的字符数量,可以象 s 说明
符那样,在[]前面使用位域,例如:
scanf("%10[^abcd]", ptr);
这样结果字符串最多只能包含 10 个字符(除'/0'字符外)。
[符号可以作为扫描列表中的一个成员,但]字符除紧贴最左边的[字符或抑扬符两种情况外,
其余情况下都不会被看作扫描列表的成员。例如“%[]abcd]”或者“%[^]abcd]”,上述两种情况
下]字符属于扫描列表的成员,但如果是“%[ab]cd]”,中间的]字符不会被看作扫描列表的成员,
而且输入输出的结果会是乱七八糟的。
对于减号-,只有在紧贴[字符或抑扬字符以及作为扫描列表最后一个成员时,-字符才会被
视为扫描列表的成员。c 标准把其余情况规定为编译器相关的。大多数编译器把这种情况的减
号定义为连字符,例如:
scanf("%[a-zA-Z]", ptr);
那么扫描列表由大小写各 26 个字母组成。少数编译器仍旧把这种情况下的减号视为扫描列表成
员。
fscanf(fd,"%*[^/n]/n");//%*是虚读,没有存,只是让指针跳过了这个变量!



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0