Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fscanf过滤线路_C - Fatal编程技术网

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