使用 scanf 扫描 %d 格式说明符中的八进制和十六进制数
Scanning an octal and hexadecimal number in %d format specifier with scanf
我正在尝试用 C 打印八进制和十六进制数。以下是按预期打印
int a = 012;
printf("%d",a); //printing as 10. The decimal representation of octal 12.
但是,当我使用 %d
扫描 012
时,0
被忽略并且正在打印 12
。这是什么原因?
int b;
scanf("%d",&b);
printf("%d", b); //printing 12.
当我使用 %d
扫描 0x12
时,输出为 0
如下
int b;
scanf("%d",&b);
printf("%d", b); //printing 0
这是什么原因?为什么他们没有给出任何运行时错误?
提前致谢!!!
scanf
的 %d
格式说明符明确需要一个格式化为十进制整数的数字。因此,当您输入“012”时,读取的是 12,因为前导 0 基本上被忽略了。然后,当您输入“0x12”时,扫描会在字符“x”处停止,因此会读取值 0。
如果您使用 %i
格式说明符,如果字符串以“0x”开头,它将使用十六进制,如果以“0”开头,则使用八进制,否则使用十进制。
说明
int a = 012; // a is assigned decimal value 10 (012 is octal = 10 in decimal)
printf("%d",a); // printing a in decimal as 10
在第一个代码片段的情况下,您分配 a=10(表示为八进制 012)并以十进制格式打印它。
int b;
scanf("%d",&b); // read an integer in decimal format
printf("%d", b); //printing 12 because the input was 12 after ignoring the 0.
当您将 scanf 与 %d 一起使用时,它需要一个十进制格式的整数。所以它忽略第一个 0 并分配 b = 12。当你打印它时,你会看到 12.
int b;
scanf("%d",&b);
printf("%d", b); //printing 0
在上述情况下,您要求 scanf 读取十进制格式的整数,当您输入 0x12 时,它会在读取 0 后停止扫描字符 x,因为 x 不能是有效整数的一部分。
解决方案
所以这是要走的路。
"%d" - to input decimal value
"%o" - to input integer value in an octal format
"%x" - to input integer value in hexadecimal format
"%i" - to input integer in any format (decimal/octal/hexadecimal)
我正在尝试用 C 打印八进制和十六进制数。以下是按预期打印
int a = 012; printf("%d",a); //printing as 10. The decimal representation of octal 12.
但是,当我使用
%d
扫描012
时,0
被忽略并且正在打印12
。这是什么原因?int b; scanf("%d",&b); printf("%d", b); //printing 12.
当我使用
%d
扫描0x12
时,输出为0
如下int b; scanf("%d",&b); printf("%d", b); //printing 0
这是什么原因?为什么他们没有给出任何运行时错误?
提前致谢!!!
scanf
的 %d
格式说明符明确需要一个格式化为十进制整数的数字。因此,当您输入“012”时,读取的是 12,因为前导 0 基本上被忽略了。然后,当您输入“0x12”时,扫描会在字符“x”处停止,因此会读取值 0。
如果您使用 %i
格式说明符,如果字符串以“0x”开头,它将使用十六进制,如果以“0”开头,则使用八进制,否则使用十进制。
说明
int a = 012; // a is assigned decimal value 10 (012 is octal = 10 in decimal)
printf("%d",a); // printing a in decimal as 10
在第一个代码片段的情况下,您分配 a=10(表示为八进制 012)并以十进制格式打印它。
int b;
scanf("%d",&b); // read an integer in decimal format
printf("%d", b); //printing 12 because the input was 12 after ignoring the 0.
当您将 scanf 与 %d 一起使用时,它需要一个十进制格式的整数。所以它忽略第一个 0 并分配 b = 12。当你打印它时,你会看到 12.
int b;
scanf("%d",&b);
printf("%d", b); //printing 0
在上述情况下,您要求 scanf 读取十进制格式的整数,当您输入 0x12 时,它会在读取 0 后停止扫描字符 x,因为 x 不能是有效整数的一部分。
解决方案
所以这是要走的路。
"%d" - to input decimal value
"%o" - to input integer value in an octal format
"%x" - to input integer value in hexadecimal format
"%i" - to input integer in any format (decimal/octal/hexadecimal)