C fscanf以正确的格式读取

时间:2014-05-02 08:25:03

标签: c file format scanf

我完全坚持C

中的fscanf formatizer
Alice:(44;69) Bob:(74;68) John:(57;98)

这是我需要从文件中读取的内容。 Name:(score1, score2)。但我没能为它构建正确的形成器:

while(fscanf(f, "%[a-zA-Z]%[;(]%d %d", &buff, &garbage, &s1, &s2)!= EOF){          

我做错了什么?

1 个答案:

答案 0 :(得分:0)

首先,如果您检查,例如this scanf (and family) reference您可以看到您可以在格式代码中添加星号以禁止分配,因此无需传递"垃圾"变量

其次对于你的问题,数字用分号分隔,但你有一个与空格对应的格式的空格。

事实上,由于scanf中内置的模式匹配功能,您应该能够将格式规范简化为例如。

fscanf(f, " %[^:]:(%d;%d)", buff, &s1, &s2)

"%[^:]"格式将所有内容作为字符串读取,直到看到冒号。然后格式的其余部分匹配冒号,左括号,十进制数,分号,另一个十进制数和右括号。我还在格式中添加了一个前导空格,如果有空格,则跳过前导空格。