C扫描读取正确的格式



我完全被困在C的fscanf格式化器

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){          

我做错了什么?

首先,如果你检查例如这个scanf(和家族)引用,你可以看到你可以在格式代码中添加星号来抑制赋值,所以不需要传递"垃圾"变量。

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

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

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

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

最新更新