我想在从 char 数组读取之前跳过任何分号或换行符。我写了这样的代码:
char[] buf;
// buf initialized
double val = 0.0;
sscanf(buf, "%[;\n]%lf", &val);
但是如果buf开头没有分号或者换行符就不行了。我如何更改该代码以仅在它们存在时跳过这两个字符?
编辑:sscanf(buf, "%*[;\n]%lf", &val);
也不起作用。
测试样本buf值:“67.445906;20.239875;89.577929;6.350902;7.788324\n19.806513;69.875179;”
edit2:我阅读了C++ reference ,在关于说明符的部分中,“除 %n 外,任何说明符至少应使用一个字符。否则匹配失败,扫描到此结束。”
最佳答案
您必须使用*。 * 表示丢弃读取的内容,不要将其存储在输出变量中。 [...] 表示读取与方括号之间的字符匹配的任何字符序列。这是一个例子:
sscanf(buf, "%*[;\n]%lf", &val);
关于c - sscanf : skip any number of given chars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367427/