我正在使用 C 使用 scanf("%i", &myInt)
读取整数数据。我知道对于这个特定的输入,数据总是三位数。但是,有时我需要读取前导 0 的数字,例如 001 或 078。当 scanf()
读取前导零的数字时,它不会获取后续数字。例如,当我读取 078 scanf
读取 7 那么下一个 scanf
将读取 8。我希望 scanf
读取 78。有人可以吗告诉我如何正确地做到这一点?这是一个代码示例:
int x;
while (scanf("%i", &x) != EOF) {
//do operations on each of the digits
}
最佳答案
我怀疑您可能正在使用 %i
转换说明符,它遵循 C 约定,例如 0x
表示十六进制,前导零表示八进制。如果输入是 078
并且使用了 %i
,那么只有 07
匹配,因为 8
不是八进制数字.使用 %d
扫描十进制整数。
%i
中的 i
并不意味着“每当您需要将 i)nteger 转换为类型 i)nt 时,请联系我”。
仅当三位数字后跟我们需要从扫描中排除的更多数字时才需要宽度。例如,我们可以使用格式字符串 "%4d%2d%d"
将作为 "20140417"
给出的日期转换为三个整数。最后一个 %d
可以是 %2d
但不一定是。这些值不指定要提取的位数,而是指定最大字段宽度:转换最多需要那么多字符(包括可能的加号或减号)。对于输入 -1234
,%3d
转换将采用 -12
,并保留 34
。对于输入 1$
,%3d
将只取 1
而保留 $
,因为它不是t 十进制数。
关于c - 如何在 C 中使用 scanf 读取前导 0 作为一个 int 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123059/