2016-04-01 5 views
0

Ethernet Стартовый комплект (PIC32MX9795F512L)
язык: C
MPLAB IDE 8,92
Компилятор: XC32 v1.3C- ведущим нулем без Printf

Здравствуйте я хочу, чтобы добавить ведущие нули к своим переменным. В конце я хочу использовать массив в массиве. Например: c=10*a+b. Когда c=5 должно быть 05. Я не могу использовать любую функцию printf, или я не прав?

+1

Что вы используете для вывода, который не является 'printf'? У вас есть 'sprintf'? –

+0

Это ваша среда - почему вы спрашиваете нас? –

+0

Если вы говорите, что не думаете, что 'printf()' может форматировать десятичные целые числа с ведущими нулями, то вы ошибаетесь. Просто используйте флаг '0' в соответствующем спецификаторе преобразования. –

ответ

1

Вы можете использовать printf() просто распечатать отформатированный номер на стандартный вывод:

int c = 5; 
fprintf(stdout, "c [%02d]\n", c); 

Если вы не можете использовать printf(), другой вариант, чтобы сохранить проложенное значение в char * или строке. Вместо этого вы можете использовать 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 * достаточно длинной длины.

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 
} 
Смежные вопросы