我是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格式代码呢?
感谢。
答案 0 :(得分:3)
您不能使用printf
的一行来完成此操作。但是,您可以先使用sprintf
在文本周围加上引号,然后使用printf
来对齐输出。
char buffer[20];
sprintf(buffer, "\"%s\"", tp);
printf("String value: %-12s <--> Unsigned long value: %10lu\n", buffer, dwAtoDW(cp));