使用fscanf过滤线路
我正在读一份表格文件使用fscanf过滤线路,c,C,我正在读一份表格文件 A number,number A number,number [space] B number,number etc 其中,我只想读取以空格开头的行(即,在上面的示例中,仅最后一行)。我写了这个循环: while ((g = fscanf(fp," %c %x,%d\n",&a,&b,&c) != EOF){ printf("%c %x,%d\n",a,b,c); } 但是,尽管我在字符串的开头加了空格,它仍然输出所有的
A number,number
A number,number
[space] B number,number
etc
其中,我只想读取以空格开头的行(即,在上面的示例中,仅最后一行)。我写了这个循环:
while ((g = fscanf(fp," %c %x,%d\n",&a,&b,&c) != EOF){
printf("%c %x,%d\n",a,b,c);
}
但是,尽管我在字符串的开头加了空格,它仍然输出所有的行。我知道我可以在循环中过滤它们,但是否可以在fscanf中指定它们?实现所需功能的一种方法是使用getc并检查空间,如果找到空格,请调用ungetc并使用fgets读取该行,否则请读取该行并跳过该行操作:可以在
fscanf
中指定该行吗?是的,但是很难看。使用最好的工具来完成这项工作 使用
fgets()
,然后使用sscanf()
进行扫描
sscanf
需要buf
作为其第一个参数(要从中扫描的字符串)。实际上,它应该会给你一些严重的编译器警告。
char buf[100];
char a;
unsigned b;
int c;
while (fgets(buf, sizeof buf, fp) != NULL) {
// Thank-you @Chris Dodd
if ((buf[0] == ' ') && (sscanf(buf, " %c%x,%d", &a,&b,&c) == 3)) {
printf("%c %x,%d\n",a,b,c);
}
}