Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言打印格式化字符串_C_Formatting_Printf - Fatal编程技术网

用C语言打印格式化字符串

用C语言打印格式化字符串,c,formatting,printf,C,Formatting,Printf,所以我有一个长度为10的字符串。我想打印4-6的字母(包括两者),我想把输出跨越一个特定的长度L,数字放在右边 例如 如果我有原始字符串123456789,则以下代码应以后续方式显示 printf(Original); printf(from 4-6, over 5 spaces) 输出: 123456789 456 也就是说456分布在5个空格上,并向右缩进 用C怎么做 编辑1:如果我的宽度不是常数,并且我有一个变量,它决定了宽度,该怎么办。同样,子字符串的长度也是一个变量。现在有办法

所以我有一个长度为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);
非常直接:

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);

。。。宽度相同

将整数划分为特定数组,然后打印您喜欢的数组索引。我猜原始加3将从4开始字符串,使其停止在6?3%5.3s是精度(要打印的最大字符数)@DavidRF编辑问题,如果您可以添加到答案中?谢谢,比如说,我的字段宽度不是常数,我可以用什么方法合并它?也就是说,如果我有
width
变量,它会告诉我总的宽度这现在在这里不起作用了,是吗?不是刚才问的问题差不多一样,尽管方式不同?
#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);