如何使用 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()
进行用户输入。
我需要读取像“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()
进行用户输入。