这个格式说明符在C中是什么意思?
我有一个这样的代码片段这个格式说明符在C中是什么意思?,c,file-handling,C,File Handling,我有一个这样的代码片段 while( fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)!=EOF) 读取的格式字符串部分 特别是这一部分 匹配字符集中的非空字符序列。如果 集合的第一个字符是^,然后是不在集合中的所有字符 一套是匹配的 因此,该格式说明符匹配所有字符,除了,字符(格式字符串中的字符随后匹配)。所以,如果你有一个像 typedef struc
while( fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)!=EOF)
读取的格式字符串部分 特别是这一部分 匹配字符集中的非空字符序列。如果 集合的第一个字符是^,然后是不在集合中的所有字符 一套是匹配的 因此,该格式说明符匹配所有字符,除了
,
字符(格式字符串中的字符随后匹配)。所以,如果你有一个像
typedef struct Book_t {
char type;
char title[100];
char author[100];
float price;
}Book ;
然后有一个在模式中包含数据的文件:
BookType,BookTitle,BookAuthor,BookPrice
然后有一次,你可以把每一行读进book
as
fscanf(b,"%c,%[^,],%[^,],%f",&book.type,book.title,book.author,&book.price)
对于文件的一行,如下所示:
A,old man and the sea,ernest hemingway,12.5
A
将被读入book。键入
,然后读取所有与逗号不匹配的字符,这样将一直读入sea
,并停止,因为下一个字符是,
。此,
将与格式字符串中的,
匹配。对于author字段,将重复相同的过程
请注意,读取未指定数量的字符直到匹配在逗号之前停止是不好的,因为它读取的缓冲区通常是固定长度的。这就是为什么这样做时最好指定最大宽度(考虑空字符)。继续上面的例子,这看起来像
fscanf(b,"%c,%99[^,],%99[^,],%f",&book.type,book.title,book.author,&book.price)
让99表示它最多只能匹配99个字符,以避免任何缓冲区溢出,因为缓冲区
title
最多只能容纳100个字符,并且\0
字符至少需要一个字节。表示它读取字符串,但遇到时停止,
字符。然后使用后面的逗号匹配并读取停止它的逗号。否则,下一个%[^,]
和%f
将暂停。