【发布时间】:2019-04-03 18:57:08
【问题描述】:
当我使用输入“01”运行以下代码时,值的值为 1,忽略 0。但是,如果我输入“301”且 0 不在第一个位置,则代码可以工作。
int input;
printf("Enter an number: \n");
scanf(" %d", &input);
char array[10];
int value = sprintf(array, "%d", input);
printf("%d", value);
【问题讨论】:
-
它是一个 int,而不是一个字符串。
-
这是意料之中的。
scanf()将01和1转换为相同的位模式(一堆零位和最后一个位) - 而sprintf()无法判断转换后的文本中有多少前导零(如果,确实,任何文本都被转换了)。请注意,在源代码中,0777和777产生非常不同的值;第一个是八进制常数,第二个是十进制常数。在带有scanf("%d", …);的十进制输入中,前导零被忽略;对于scanf("%i", …);,前导零很重要(它又是八进制)。 -
@Ben
01是否转换为与1不同的整数?转换为 int 时,01的exact value是什么? -
如果要读取前导零,最好的选择是将数字作为字符串读取
-
然后将输入保存到 char 数组,而不是 int。您对数字的整数值不感兴趣,而是对位置的每个值感兴趣。这是另一个问题。您发布了
sprintf seems to ignore 0。你想要how to use scanf to extract all numbers by their position in string。