2016-04-01 20 views
0

Ethernet başlangıç ​​kiti (PIC32MX9795F512L)
dilini sıfır: C
MPLAB IDE 8.92
Derleyici: XC32 v1.3C- printf olmadan

Merhaba benim değişkenlere baştaki sıfırları eklemek istiyorum. Sonunda bir dizide kullanmak istiyorum. Örneğin: c=10*a+b. c=5 olduğunda, 05 olmalıdır. Herhangi bir printf işlevini kullanamıyorum veya hatalı mıyım?

+1

"printf" olmayan "output" için ne kullanıyorsunuz? Sprintf var mı? –

+0

Bu senin ortamın - neden bize soruyorsun? –

+0

Eğer printf() 'nin baştaki sıfırlarla ondalık tamsayıları biçimlendirebileceğini düşünmüyorsanız, yanılıyorsunuz demektir. İlgili dönüşüm belirtecinde "0" işaretini kullanmanız yeterlidir. –

cevap

1

Sadece standart çıkışa biçimli bir numara yazdırmak için printf() kullanabilirsiniz:

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

Eğer printf() kullanamıyorsanız, başka bir seçenek char * veya dize bir de yastıklı değeri saklamaktır. Biçimlendirilmiş dizeyi char * arabelleğine yazmak için sprintf() öğesini kullanabilirsiniz. Örneğin

: Bu yolu ise, yol boyunca kontrol bazı hata yapabileceğini nasıl görebilirsiniz

#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; 
} 

. Dize uzunluğu hakkında düşünmeniz (hint: log10()) ya da char * yerine yeterli uzunlukta uzun bir statik char [] dizisi kullanmanız gerekir.

0

Negatif değerlerle de ilgilenmeniz şartıyla, başa sıfır bir sıfır eklemek oldukça kolaydır. Bir diziye yazmak istediğinizi söylediniz, bu yüzden sprintf kullandım, ancak doğrudan çıkış yapmak isterseniz, printf'u benzer şekilde kullanabilirsiniz.

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 
}