众所周之,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("[^abcd]", ptr); 这样结果字符串最多只能包含10个字符(除' '字符外)。 [符号可以作为扫描列表中的一个成员,但]字符除紧贴最左边的[字符或抑扬符两种情况外,其余情况下都不会被看作扫描列表的成员。例如“%[]abcd]”或者“%[^]abcd]”,上述两种情况下]字符属于扫描列表的成员,但如果是“%[ab]cd]”,中间的]字符不会被看作扫描列表的成员,而且输入输出的结果会是乱七八糟的。 对于减号-,只有在紧贴[字符或抑扬字符以及作为扫描列表最后一个成员时,-字符才会被视为扫描列表的成员。c标准把其余情况规定为编译器相关的。大多数编译器把这种情况的减号定义为连字符,例如: scanf("%[a-zA-Z]", ptr); 那么扫描列表由大小写各26个字母组成。少数编译器仍旧把这种情况下的减号视为扫描列表成员。 %n说明符输出有效字符数量,%n在scanf和printf中都可使用。与%n相对应的形参是一个int类型的指针,%n不影响scanf和printf的返回值。例如: scanf("%d %d%n", &i, &j,&k); 如果输入434 6434,则k等于8,而scanf的返回值仍然为2。又如: scanf("%c%n", &ch, &k); 输入“sbcdefdg”后,k等于1,而不是8,因为%c只取一个字符,%n输出的是有效字符数量。 %n用在printf函数里,表示输出的字符数量,例如: printf("i=%d, j=%dn%n", i, j, &k); 在i=343、j=123的情况下,k=12,同时%n不影响printf的返回值,其返回值仍然为12,而不是14。 ============================================================== 这个用法是在H264 jm82参考代码上看到的,用来从解码器参数配置文件中读取配置参数,代码如下: // read the decoder configuration file fscanf(fd,"%s",inp->infile);// H.26L compressed input bitsream fscanf(fd,"%s",inp->outfile);// YUV 4:2:2 input format fscanf(fd,"%s",inp->reffile);// reference file 对应的配置文件内容如下: test.264........H.26L coded bitstream 通过这种方式 inp->infile = "test.264" inp->outfile = "test_dec.yuv" inp->reffile = "test_rec.yuv" 而相应的配置文件中的一些注释则不会被读入,这是相当简便的用法,比起通过严格约定注释符并进行一个字符一个字符来解析,这种方式简单了许多!值得借鉴 |
转scanf^ /fscanf的% 和%n使用方法 while scanf d n eof
更多阅读
初次使用高频感应加热机的认识及使用方法 高频感应加热电源
初次使用高频感应加热机的认识及使用方法——简介初次使用高频感应加热机的认识及使用方法:初次使用高频感应加热机的认识及使用方法——方法/步骤初次使用高频感应加热机的认识及使用方法 1、先了解主要规格参数初次使用高频感应
淘宝直通车的最有效使用方法 淘宝网直通车技巧
?????? 流量是一个店铺的生命,没有流量必然是死路一条,众所周知,直通车是淘宝店付费推广中比较适用的方式,好处是精准,见效快,坏处是,烧钱啊!呵呵,所以很多小卖家望而生畏,同样作为小卖家的我,在三个月之前接触淘宝,用两个月时间成功运作一个三
word2013中表格的橡皮擦使用方法 word表格橡皮擦在哪里
word2013中表格的橡皮擦使用方法——简介word2013现在用的人越来越多了,但是由于这个版本与之前的版本有好多不一样的地方,好多工具的位置都变了。下面讲一下word2013中表格中橡皮擦的使用方法。word2013中表格的橡皮擦使用方法——
正确的男士香水使用方法 男士香水使用方法图解
下文由小编直接为男士们带来“喷一喷”男人更性感的男士香水的正确用法,主要有涂抹式、七点法和喷雾法三种正确使用方法。正确的男士香水使用方法——工具/原料香水正确的男士香水使用方法——步骤/方法正确的男士香水使用方法 1、
笔记本电脑电池的保养和正确使用方法 笔记本电脑锂电池保养
笔记本电池可以说是笔记本电脑最重要的动力源泉。没有电池提供能源,则无法完成移动办公的特殊要求。那么我们手中的笔记本最多也只能是一个移动PC罢了。而笔记本电池的保养和使用技巧也成了多数消费者最头疼的事情。现在在笔记本电