|
|
发表于 2005-5-9 12:01:46
|
显示全部楼层
Post by kj501
scanf是以空格,制表符,换行符作为分隔符的。格式字符串中的一个空格可能相当于多个输入的空格、制表符或换行符。
版主此言差矣
scanf族函数无分隔符之说!只是大家用多了%s匹配,才主观地认为有空白字符的分隔符。
以我之见,从下面共四种方式来认识scanf的格式匹配应该是比较正确的:
1, %s,%d,%f
最常用的一个匹配规范,也是基本匹配规范,它们是一个受限制的匹配规范,此限制是空白字符,即它匹配从开头或上一个匹配规范结束后的第一个非空白字符起到后面的第一个空白字符止。这里的非空白字符串定义就是空格,制表符,换行符了。
2, %*s ,%*d,%*f
忽略输入字串中的多余信息,也是受空白字符的限制。
3, %c
不受限的匹配规范,它可匹配上面提到的空白字符或其他非空白字符
4, %[XXX]
也是不受限的匹配规范,只要是[]里出现的字符都匹配,如果出现了空白字符,那也匹配
- #include <stdio.h>
- int
- main(void)
- {
- char b[50];
- int d,a;
- sscanf(" 123 432 abc d888", "%d%*d%[ abcd]%d", &d, b, &a);
- /* 这里的格式化字串%d等之间没有用所谓的分隔符,但用上是会有助于程序的可读性 */
- printf("b is :%s\nd is %d\na is:%d\n", b, d, a);
- return 0;
- }
复制代码 |
|