Ich habe 2 Zahlen, die erste (eine ID) ist zwischen 1 und 8 Stellen lang und die 2. (Seriennummer) zwischen 1 und 12 Zeichen. Der Haken: aus historischen Gründen ist die ID linksbündig, also funktioniert %0 hier leider nur für die 2. Zahl (als %012d) Soll also am Ende z.B. so aussehen: 12345670000987654321 Gibt es eine einfache Möglichkeit, einen String am Ende mit beliebigen Zeichen (hier halt 0) auf eine fixe Länge aufzublasen? In C# gibts dafür StringPadRight()?
1 | #include <stdio.h> |
2 | |
3 | int main() { |
4 | unsigned long a = 1234567, b = 987654321; |
5 | |
6 | int n = printf("%ld", a); |
7 | printf("%0*ld", 20-n, b); |
8 | |
9 | return 0; |
10 | }
|
Danke, das ist für mich aber etwas zu viel Adress-magic in C.
Luky S. schrieb: > Danke, das ist für mich aber etwas zu viel Adress-magic in C. Da ist exakt gar keine "Adress-magic" vorhanden.
1 | int n = printf("%ld", a); |
Das gibt den Wert "a" aus und liefert die Anzahl der ausgegebenen Stellen. (Lass' Dich nicht vom l im Formatspezifizierer verwirren, der ist nur wegen des Datentyps long anstelle von int nötig)
1 | printf("%0*ld", 20-n, b); |
Und das hier gibt den Wert "b" mit der angegebenen Stellenanzahl (20 - n) aus und zwar mit führenden Nullen. Für die Werte unsigned long a = 1234567, b = 987654321; ergibt sich also n = 7 (da die Zahl sieben Stellen hat) 20 - 7 ist 13. Die neunstellige Zahl b wird also mit vier vorangestellten Nullen ausgegeben. Keine Adresse, nirgendwo. Auch keine Magie.
"%0*ld" verstehe ich nicht wieso nicht "%0ld"?
Luky S. schrieb: > "%0*ld" verstehe ich nicht - https://en.cppreference.com/w/cpp/io/c/fprintf Zitat daraus: "integer value or * that specifies minimum field width. The result is padded with space characters (by default), if required, on the left when right-justified, or on the right if left-justified. In the case when * is used, the width is specified by an additional argument of type int, which appears before the argument to be converted and the argument supplying precision if one is supplied. If the value of the argument is negative, it results with the - flag specified and positive field width (Note: This is the minimum width: The value is never truncated.). "
Wieder was gelernt, danke!
Luky S. schrieb: > "%0*ld" verstehe ich nicht > wieso nicht "%0ld"? Zitat aus "Programmieren in C": "Als Feldbreite oder Genauigkeit kann jeweils * angegeben werden; dann wird der Wert durch Umwandlung des nächsten Argumentes festgelegt (das ein int-Wert sein muß)." rhf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.