以太网入门工具包(PIC32MX9795F512L)
语言:C
MPLAB IDE 8.92
编译器:XC32 v1.3
您好,我想在变量中添加前导零。最后我想在数组中使用。例如:c=10*a+b
。什么c=5
时候应该05
。我不能使用任何printf
功能还是我错了?
以太网入门工具包(PIC32MX9795F512L)
语言:C
MPLAB IDE 8.92
编译器:XC32 v1.3
您好,我想在变量中添加前导零。最后我想在数组中使用。例如:c=10*a+b
。什么c=5
时候应该05
。我不能使用任何printf
功能还是我错了?
您可以使用printf()
简单地将格式化数字打印到标准输出:
int c = 5;
fprintf(stdout, "c [%02d]\n", c);
如果您不能使用printf()
,另一种选择是将填充值存储在 achar *
或字符串中。您可以改为使用sprintf()
将格式化的字符串写入char *
缓冲区。
例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[]) {
{
char* c_str = NULL;
int c_int = 5;
int c_str_length = 3; /* two bytes for "0", "5", and one byte for the nul terminator */
c_str = malloc(c_str_length);
if (!c_str) {
fprintf(stderr, "Error: Could not allocate space for string!\n");
return EXIT_FAILURE;
}
int n = sprintf(c_str, "%02d", c_int);
if (n != c_str_length) {
fprintf(stderr, "Error: Something went wrong in writing the formatted string!\n");
free(c_str);
return EXIT_FAILURE;
}
fprintf(stdout, "c_str: [%s]\n", c_str);
free(c_str);
return EXIT_SUCCESS;
}
如果你走这条路,你可以看到如何在此过程中进行一些错误检查。您需要考虑字符串长度(提示:)log10()
,或使用静态char []
数组代替char *
足够长的长度。
如果您也处理负值,添加前导零非常容易。你说你要写数组,所以我用了,sprintf
但是如果你想直接输出,你可以用printf
类似的方式使用。
char cstr[24];
int c = 10 * a + b;
if (c > 0) {
sprintf(cstr, "0%d", c);
} else if (c < 0) {
sprintf(cstr, "-0%d", -c);
} else {
//sprintf(cstr, "00");
sprintf(cstr, "0"); // depending on your needs
}