C - fscanf - 你可以向前移动文件指针吗?

时间:2016-11-27 16:34:36

标签: c

目前在我的程序中,我使用fscanf来读取文件,直到达到|符号。这是一个问题,因为当它到达第一个|时,它不会前进。我可以将指针向前移动一个位置吗?

以下是我正在使用的代码:

fscanf(reader, "%d[^|]", &record1[0].CustomerID);
printf("%d \n", record1[0].CustomerID);
fscanf(reader, "%99[^|]", record1[0].domain);
printf("%s \n", record1[0].domain);
fscanf(reader, "%99[^\n]", record1[0].timestamp);
printf("%s \n", record1[0].timestamp);

信息在文件中分开:

31 | www.facebook.com | 2015-10-15 12:13:02

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

首先,%[]是一种自给自足的格式,只能读取字符串。第一个"%d[^|]"中的fscanf不代表“读取一个整数,直到|符号”,正如您可能想要的那样。 %d格式本身将停留在|,因为|字符不是整数表示的有效部分。

其次,在其他情况下,你可以只对你碰到的角色进行非分配阅读

fscanf(reader, "%99[^|]%*c", record1[0].domain);

那将跳过该字符并将文件指针向前移动1个字符。

或者,如果您的格式非常严格,您可以将此类fscanf写为

fscanf(reader, "%99[^|]|", record1[0].domain);

在这种情况下,第一个fscanf可以写成

fscanf(reader, "%d|", &record1[0].CustomerID);

但请记住,%[]格式无法读取空字符串。当%[]格式与单个输入字符不匹配时,将失败而不是读取空字符串。

除其他外,这样的怪癖是最好使用fgets然后手动解析字符串的原因。