将前导零添加到整数不起作用(arduino,c)

man*_*elp 2 c arduino

例如,我想将数字 12 转换为 0012。这样数字总是 4 个字符长。我用这个代码试了一下:

int number;
int result;

void setup() {
    number = 12;
    Serial.begin(9600);
    result = printf("%03d", number);
}

void loop() {
    Serial.println(result);
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码只输出 -1 而不是 0012。这段代码有什么问题?

Rio*_*ams 5

整数不能也不能识别像前导零这样的格式。

存储此类信息的唯一方法是使用字符串(例如 achar[]而不是整数,但看起来您只是写出值,因此您不需要为它设置变量(因为printf()将处理该值)你)。

// %04d% will pad your number to 4 digits
printf("%04d", number);
Run Code Online (Sandbox Code Playgroud)

如果您确实需要存储您的值,您可以使用sprintf()并声明您的值,result如下所示:

int number;
char *result = malloc(5);
Run Code Online (Sandbox Code Playgroud)

然后在您的setup()函数中将其设置为:

sprintf(result, "%04d", number);
Run Code Online (Sandbox Code Playgroud)

使用这两个更改,您更新后的代码可能如下所示:

int number;
char *result = malloc(5);

void setup() {
    number = 12;
    Serial.begin(9600);
    sprintf(result, "%04d", number);
}

void loop() {
    Serial.println(result);
}
Run Code Online (Sandbox Code Playgroud)

在输出它们时考虑格式化您的值,否则您可以使用整数值来执行任何算术和计算。