使用fscanf过滤行

时间:2014-10-07 01:52:18

标签: 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中指定它吗?

2 个答案:

答案 0 :(得分:3)

OP:可以在fscanf中指定它吗? 答:是的,但它的丑陋。使用最好的工具。

使用fgets(),然后使用sscanf()进行扫描。

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);
  }
}

答案 1 :(得分:0)

实现目标的一种方法是使用 getc 并检查空间,如果找到空格,请调用 ungetc < / strong>并使用 fgets 读取该行,否则请阅读该行并跳过它