【发布时间】:2012-11-04 19:53:30
【问题描述】:
使用 fscanf 我想处理包含两个浮点数的文本,浮点数之前、之间或之后的任意数量的空格(包括换行符/返回),以及最后的换行符。如果多于/少于两个数字,那么我想检测并报告错误。
这似乎适用于处理空白,但它不会检测是否存在两个以上的浮点数:
fscanf(f, "%f %f", &sx, &sy);
这似乎也同样有效:
fscanf(f, "%f %f%*[ \n\t\r\f\v]\n", &sx, &sy);
有没有更好的方法来处理这个问题?
【问题讨论】:
-
您的最后一个示例如何捕获最后一个换行符?它不是通过正则表达式得到的吗?
-
@effeffe:好点,我想确保最后确实有一个换行符,否则无法保证正则表达式找到换行符,但我不确定这是正确的方法。
-
好吧,scanf 总是会失败,没有字符串可以匹配
%[a]a格式 -
@David:你现在所说的空白到底是什么意思?换行符对你来说算不算空格?
-
@askmish:在标准 C 中,换行符是空格,他将换行符放在他的正则表达式和他的问题中,所以......是的。来自 OP:"...(包括换行符/回车符),最后是换行符。"