0

以太网入门工具包(PIC32MX9795F512L)
语言:C
MPLAB IDE 8.92
编译器:XC32 v1.3

您好,我想在变量中添加前导零。最后我想在数组中使用。例如:c=10*a+b。什么c=5时候应该05。我不能使用任何printf功能还是我错了?

4

2 回答 2

1

您可以使用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 *足够长的长度。

于 2016-04-01T19:46:07.300 回答
0

如果您也处理负值,添加前导零非常容易。你说你要写数组,所以我用了,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
}
于 2016-04-01T19:48:59.797 回答