Wie kann ich in der Sprache C eine Zahl von 1123456789
a 1,123,456,789
? Ich habe versucht, mit printf("%'10d\n", 1123456789);
aber das funktioniert nicht.
Können Sie etwas empfehlen? Je einfacher die Lösung ist, desto besser.
Wie kann ich in der Sprache C eine Zahl von 1123456789
a 1,123,456,789
? Ich habe versucht, mit printf("%'10d\n", 1123456789);
aber das funktioniert nicht.
Können Sie etwas empfehlen? Je einfacher die Lösung ist, desto besser.
#include <stdio.h>
void punt(long long n){
char s[28];
int i = 27;
if(n<0){n=-n; putchar('-');}
do{
s[i--] = n%10 + '0';
if(!(i%4) && n>9)s[i--]='.';
n /= 10;
}while(n);
puts(&s[++i]);
}
int main(){
punt(2134567890);
punt(987);
punt(9876);
punt(-987);
punt(-9876);
punt(-654321);
punt(0);
punt(1000000000);
punt(0x7FFFFFFFFFFFFFFF);
punt(0x8000000000000001); // -max + 1 ...
}
In meiner Lösung wird ein . statt eines , Es bleibt dem Leser überlassen, dies zu ändern.
Diese Frage ist alt und es gibt viele Antworten, aber die Frage war nicht "wie kann ich eine Routine schreiben, um Kommas hinzuzufügen", sondern "wie kann das in C gemacht werden"? Die Kommentare wiesen in diese Richtung, aber auf meinem Linux-System mit GCC funktioniert das bei mir:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
unsetenv("LC_ALL");
setlocale(LC_NUMERIC, "");
printf("%'lld\n", 3141592653589);
}
Wenn dies ausgeführt wird, erhalte ich:
$ cc -g comma.c -o comma && ./comma
3,141,592,653,589
Wenn ich die Option LC_ALL
vor der Ausführung des Programms die Variable unsetenv
ist nicht erforderlich.
Meine Antwort formatiert das Ergebnis nicht genau so wie die Illustration in der Frage, aber kann den tatsächlichen Bedarf decken in einigen Fällen mit einem einfachen Einzeiler oder Makro. Man kann es erweitern, um mehr Tausendergruppen zu erzeugen.
Das Ergebnis sieht dann zum Beispiel wie folgt aus:
Value: 0'000'012'345
Der Code:
printf("Value: %llu'%03lu'%03lu'%03lu\n", (value / 1000 / 1000 / 1000), (value / 1000 / 1000) % 1000, (value / 1000) % 1000, value % 1000);
Ich bin neu in der C-Programmierung. Hier ist mein einfacher Code.
int main()
{
// 1223 => 1,223
int n;
int a[10];
printf(" n: ");
scanf_s("%d", &n);
int i = 0;
while (n > 0)
{
int temp = n % 1000;
a[i] = temp;
n /= 1000;
i++;
}
for (int j = i - 1; j >= 0; j--)
{
if (j == 0)
{
printf("%d.", a[j]);
}
else printf("%d,",a[j]);
}
getch();
return 0;
}
Hier ist eine einfache portable Lösung, die sich auf sprintf
:
#include <stdio.h>
// assuming out points to an array of sufficient size
char *format_commas(char *out, int n, int min_digits) {
int len = sprintf(out, "%.*d", min_digits, n);
int i = (*out == '-'), j = len, k = (j - i - 1) / 3;
out[j + k] = '\0';
while (k-- > 0) {
j -= 3;
out[j + k + 3] = out[j + 2];
out[j + k + 2] = out[j + 1];
out[j + k + 1] = out[j + 0];
out[j + k + 0] = ',';
}
return out;
}
Der Code lässt sich leicht für andere Integer-Typen anpassen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.