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