【问题标题】:Format a printed char array in C - quotations marks and right aligment在 C 中格式化打印字符数组 - 引号和右对齐
【发布时间】:2015-07-09 20:42:57
【问题描述】:

我是 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;
}

我有以下输出:

字符串值:“4294967295” 无符号长值:4294967295 字符串值:“123456789” 无符号长值:123456789 字符串值:“100000” 无符号长值:100000

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

字符串值:“4294967295” 无符号长值:4294967295 字符串值:“123456789” 无符号长值:123456789 字符串值:“100000” 无符号长值:100000

有没有办法用 printf 格式代码做到这一点?

谢谢。

【问题讨论】:

  • 我怀疑这是可能的,因为 "s 不是正在打印的值的一部分。一些 hacky 是让 dwAtoDW 适应遇到 "s(忽略它们),然后将 cp 分配更改为 cp = "\"100000\"";
  • 是的,它应该这样工作,但问题是那些cp 值根本无法修改(忘记提及)。感谢您的回答!

标签: c


【解决方案1】:

您不能使用printf 的一行来做到这一点。但是,您可以先使用sprintf 将引号放在文本周围,然后使用printf 对齐输出。

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

【讨论】:

  • 嗯,在作业中没有提到任何关于使用 sprintf 的内容,所以我想我会使用它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-06-22
  • 2012-01-04
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多