在C中打印格式化字符串

时间:2013-07-10 09:38:38

标签: c formatting printf

所以我有一个长度为10的字符串。我想打印4-6 [包括两者]的字母,我希望跨越特定长度L的输出,数字位于右侧

例如

如果我有原始字符串123456789,则以下代码应以后续方式显示。

printf(Original);
printf(from 4-6, over 5 spaces)

输出:

123456789
  456

这是456分布在5个空格并向右缩进。

我如何在C中完成?

编辑1:如果我的宽度不恒定怎么办,并且我有一个变量,它决定了宽度。类似地,子串的长度是变量。现在有办法吗?

我可以做点什么吗

printf("%%d.%ds",width,precision,expression);

2 个答案:

答案 0 :(得分:7)

非常直接:

printf("%5.3s\n", Original + 4);
         ^ ^
         | |
         | +--- precision, causes only 3 characters to be printed
         |
         +----- field width, sets total width of printed item

由于右侧调整是默认值,因此您可以获得所需的输出。

精度“节省”我们不必将三个字符提取到一个正确终止的字符串中,非常方便。

您可以通过将宽度指定为*并传递int参数来为精度或字段宽度(或两者都使用)使用动态值:

const int width = 5, precision = 3;
printf("%*.*s\n", width, precision, Original + 4);

答案 1 :(得分:5)

#include <stdio.h>

int main(void)
{
    char *original = "123456789";

    printf("%5.3s\n", original + 3);
    return 0;
}

编辑:

如果你想要一个基于变量的精度:

int prec = 2;

printf("%5.*s\n", prec, original + 3);

...宽度相同