如何使用 fscanf() 扫描宽度 = 2 的 UINT?

How to scan UINT with width = 2 with fscanf()?

我需要读取像“01”这样的数据,但是跳过像“1”这样的数据。 我试过 fscanf(f, "%2lu ", &ulong),但似乎 2 是最大长度,不是固定的。

是的,我知道我可以用像 %c%c 这样的符号来做到这一点,但它会更难阅读代码。

我该怎么办?

使用"%n"转换说明符

#include <stdio.h>

int main(void) {
    long n;
    int m1, m2;
    if (sscanf("   123\n", " %n%ld%n", &m1, &n, &m2) != 1) puts("scanf error");
    if (m2 - m1 != 2) puts("error with 123");
    if (sscanf("   12\n", " %n%ld%n", &m1, &n, &m2) != 1) puts("scanf error");
    if (m2 - m1 != 2) puts("error with 12");
    if (sscanf("   1\n", " %n%ld%n", &m1, &n, &m2) != 1) puts("scanf error");
    if (m2 - m1 != 2) puts("error with 1");
    return 0;
}

更好:从不使用 scanf() 进行用户输入。