为什么C代码将大于10的数字作为字母返回?

时间:2016-01-13 18:38:51

标签: c

#include <stdio.h>
int main(void)
{

    int mins = 10;
    int formu = 6 * mins;

    printf("Input: %x\n", mins);
    printf("Result: %x\n", formu);
}

结果如下:

Input: a
Result: 3c

我相信由于某种原因,其中一种类型(如果不是两种)都被生成为“双”并且放入“Int”会导致冲突。当我将“%x”中的任何一个更改为“分钟“或”formu“我收到以下错误:

error: data argument not used by format string [-Werror,-Wformat-extra-args]
    printf("Input: %mins\n", mins);
           ~~~~~~~~~~~~~~~~  ^
  • 为什么编译器假设我想要一个双?
  • 这就是大于10的数字导致字母转换的原因吗?

由于

3 个答案:

答案 0 :(得分:2)

x中的{p> %xhexadecimal格式说明符,a是十六进制的10。这与双打毫无关系。如果要打印十进制数,请使用%d

printf("Input: %d\n", mins);

有关格式说明符的详细信息,另请参阅printf documentation

答案 1 :(得分:2)

%x格式说明符告诉printf以十六进制输出给定的整数值。

如果您希望输出为十进制,请使用%d

此外,您需要确保为每个格式说明符指定正确类型的参数。所以%d%x和%u require an int , while%f required a double`。使用错误的格式说明符会导致undefined behavior

有关详细信息,请参阅printf

的手册页

答案 2 :(得分:1)

您要求printf()将数字表示为hexadecimal

尝试使用%d%i代替%x。这将显示为十进制数字。