Immer die Formatierung direkt mit sprintf()

Ich versuche, einige Formatierungen gemacht in meinem sprintf-Anweisung, aber es scheint nicht zu funktionieren wie ich es erwarte. Hier ist die Zeile:

n = sprintf(buffer, "x = %d.%d, y = %d.%d, z = %d.%d \n", x1, x2, y1, y2, z1, z2);

In diesem Ausdruck x1 ist der ganze Teil der Zahl sind, und x2 ist der gebrochene Teil. Alles wäre gut, außer ich muss pad x2, y2, und z2 immer 2 Ziffern - das heißt, ich brauche zum Auffüllen mit führenden Nullen.

Mit Beispielen, die sehe ich online wie es scheint, tun dies funktionieren sollte:

n = sprintf(buffer, "x = %d.%02d, y = %d.%02d, z = %d.%02d \n", x1, x2, y1, y2, z1, z2);

Jedoch, dass stattdessen produziert so etwas wie dieses:

x = 2.2d, y = 37.2d, z = 2.2d

Dem 37 oben ist eigentlich x2, und es anscheinend verschoben, an die Stelle von y1. Ich versucht, indem Sie eckige Klammern um die '02', aber das macht nichts.

Ich versucht haben, das aufteilen der Zeit auch so: (aber das hat nicht funktioniert)

   n = sprintf(buffer, "x = %d. %02d, y = %d. %02d, z = %d. %02d \n", x1, x2, y1, y2, z1, z2);

Ich bin mir nicht wirklich sicher, was Los ist... ich würde schätzen jede Hilfe. Dies ist nicht besonders wichtig zu tun, sprintf (ich könnte theoretisch einige schreiben 'if' Anweisungen, und es funktioniert auf diese Weise), aber es wäre schön.

Dank!

Funktioniert richtig hier. Hast du vielleicht eingegeben O statt 0 im Konvertierungen zufällig? [Weit hergeholt, ich weiß]
gut, diese Kopie eingefügt von meinem code, und ich denke, Sie sind 0EN. Ich checkte wieder, obwohl 😛 ich irgendwie gehackt zusammen eine schnelle Ersatz-Funktion dafür, aber ich wäre neugierig zu wissen, warum dies nicht funktioniert sowieso.
Okay, wenn das ein copy-paste, das format korrekt ist. Es funktionierte copy-eingefügt von hier, als visuelle Inspektion sagte, es sollte. Also, welchen compiler (und Bibliothek-Implementierung) verwenden Sie? Es sieht aus, als wenn es nicht implementieren alle flags. Aus Neugier, was hat es zu tun mit %d.%2d? Hat es Raum-pad?
Die "%d".%2d gibt mir x = -3.d, y = 59.d, z = -7.d, verschieben von x2 immer wieder. (Das ist die Beschleunigung eigentlich bin ich Messen, aber ich weiß ungefähr was für Werte sollte wo). Die compiler, die ich habe, v4 TI.1.5 von Code Composer Studio 5. Ich habe keine Ahnung, wie Sie die Bibliothek Durchführung : (hier wenn es scheint, dass es gibt eine option, um auf den vollen printf() unterstützt, das soll der Standard sein. Ich kann nicht ganz verstehen es jetzt, aber ich bin auf der Suche.
Der "Hinweis" heißt, Für MSP430, beim erstellen von neuen Projekten in CCS v4, diese option auf "minimal" standardmäßig zu vermeiden, große RAM-Anforderungen. Die "minimale" support meidet Breite und Präzision flags, die im Einklang mit der Ausgabe, die Sie sehen. Versuchen --printf_support=nofloat und sehen, ob es hilft.

InformationsquelleAutor Mewa | 2013-06-19

Schreibe einen Kommentar