目前在我的程序中,我使用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
非常感谢任何帮助
答案 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
然后手动解析字符串的原因。