2016-04-01 10 views
0

Ethernet Starter Kit (PIC32MX9795F512L)
Sprache: C
MPLAB IDE 8,92
Compiler: XC32 v1.3C- führende Null ohne printf

Hallo ich will führende Nullen meine Variablen hinzuzufügen. Am Ende möchte ich das in einem Array verwenden. Zum Beispiel: c=10*a+b. Bei c=5 sollte es 05 sein. Ich kann keine printf Funktion verwenden oder liege ich falsch?

+1

Was verwenden Sie für "Ausgabe", die nicht "printf" ist? Hast du 'sprintf'? –

+0

Es ist deine Umgebung - warum fragst du uns? –

+0

Wenn Sie sagen, dass Sie nicht denken, dass 'printf()' Dezimalzahlen mit führenden Nullen formatieren kann, dann irren Sie sich. Verwenden Sie einfach das Flag "0" im entsprechenden Konvertierungsspezifizierer. –

Antwort

1

Sie printf() einfach verwenden können, um eine formatierte Zahl an Standardausgabe:

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

Wenn Sie nicht printf() verwenden können, ist eine weitere Option in einem char * oder String den gepolsterten Wert zu speichern. Sie können stattdessen sprintf() verwenden, um die formatierte Zeichenfolge in einen char *-Puffer zu schreiben.

Zum Beispiel:

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

Wenn Sie diesen Weg gehen, können Sie sehen, wie Sie einige Fehler auf dem Weg Überprüfung tun können. Sie müssen über die String-Länge nachdenken (Hinweis: log10()), oder verwenden Sie eine statische char [] Array anstelle einer char * ausreichend langen Länge.

0

Es ist ziemlich einfach, eine führende Null hinzuzufügen, vorausgesetzt, Sie kümmern sich auch um negative Werte. Sie haben gesagt, dass Sie in ein Array schreiben möchten, also habe ich sprintf verwendet, aber wenn Sie direkt ausgeben möchten, können Sie printf auf ähnliche Weise verwenden.

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 
}