迭代地使用sscanf解析字符串输入

moh*_*hit 2 c scanf

我有一个由空格分隔的数字组成的输入字符串,如"12 23 34".
输出应该是整数数组.

我尝试了以下方法:

while (sscanf(s, "%d", &d) == 1) {
    arr[n++] = d;
}
Run Code Online (Sandbox Code Playgroud)

但我发现因为我没有从文件中读取(自动调整偏移量),
所以我d每次都会保存相同的数字.

然后我尝试了这个:

while (sscanf(s, "%d", &d) == 1) {
    arr[n++] = d;
    s = strchr(s, ' ');
}
Run Code Online (Sandbox Code Playgroud)

手动s切换到新号码.
我认为应该可以正常工作.我根本不明白它失败的原因.

小智 5

scanf提供了一个优雅的答案:%n转换,它告诉你到目前为止已消耗了多少字节.

像这样使用它:

int pos;
while (sscanf(s, "%d%n", &d, &pos) == 1) {
    arr[n++] = d;
    s += pos;
}
Run Code Online (Sandbox Code Playgroud)