在C中格式化打印的char数组 - 引号和右对齐

时间:2015-07-09 20:42:58

标签: c

我是C的新手,我在尝试格式化字符串时遇到了麻烦。

我用来打印的格式是:

cp = "42947295";
printf("String value: \"%-10s\"  <-->  Unsigned long value: %10lu\n", cp, dwAtoDW(cp));

cp = "123456789";
printf("String value: \"%-10s\"  <-->  Unsigned long value: %10lu\n", cp, dwAtoDW(cp));

cp = "100000";
printf("String value: \"%-10s\"  <-->  Unsigned long value: %10lu\n", cp, dwAtoDW(cp));

unsigned long dwAtoDW(char* cpPtr) {
    number = 0;
    while (*cpPtr) {
        if (*cpPtr >= '0' && *cpPtr <= '9') {
            number *= 10;
            number += *cpPtr - '0';
        } else {
            return 0;
        }
    *cpPtr++;
    }
    return number;
}

我有以下输出:

String value: "4294967295"    Unsigned long value: 4294967295
String value: " 123456789"    Unsigned long value:  123456789
String value: "    100000"    Unsigned long value:     100000

正如您所看到的,当打印长度小于10个字符的值时,它会在两个引号之间打印空格。我想要的是保持正确的对齐方式,引号围绕整个数字,如下所示:

String value: "4294967295"    Unsigned long value: 4294967295
String value:  "123456789"    Unsigned long value:  123456789
String value:     "100000"    Unsigned long value:     100000

有没有办法用printf格式代码呢?

感谢。

1 个答案:

答案 0 :(得分:3)

您不能使用printf的一行来完成此操作。但是,您可以先使用sprintf在文本周围加上引号,然后使用printf来对齐输出。

char buffer[20];
sprintf(buffer, "\"%s\"", tp);
printf("String value: %-12s  <-->  Unsigned long value: %10lu\n", buffer, dwAtoDW(cp));