在 C 中重用格式说明符

Reuse a format specifier in C

有没有办法在 C 中重用格式说明符?我想对接下来的 20 个输出使用相同的说明符,有没有比写说明符 20 次更简单的方法? v

在 Fortran 中,我可以通过在说明符前面写上 20 来做到这一点,因此 (20F10.0) 与 (F10.0 F10.0 F10.0...) 相同。 C中有类似的东西吗?

冒着你的预处理器宏看起来像一条口吃严重的蛇的风险,并且你未来的自己想知道为什么你做了这样的事情,你可以(ab)使用字符串常量可以连接的事实...

#include <stdio.h>

#define REPEAT5(s) s s s s s 
#define REPEAT4(s) s s s s
#define REPEAT20(s) REPEAT4(REPEAT5(s))

int main() {
    printf(REPEAT20("%d "), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
}

如果您 运行 这个 on Godbolt.org 您可以看到格式字符串已正确扩展为

.asciz  "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d "

这应该可以解决问题:

char *n_format(char *format, size_t n, char delimiter)
{
    char *result;
    int  index = 0;
    size_t len;

    if (!format)
        return (NULL);
    len = strlen(format);
    if (!(result = malloc(len * n + n)))
        return (NULL);
    for (int i = 0; i < n; ++i)
    {
        strcpy(result + index, format);
        index += len;
        result[index++] = delimiter;
    }
    result[index - 1] = '[=10=]';
    return (result);
}

用法:

int main()
{
    char *string;
    string = n_format("%.5f", 5, ' ');
    printf("|%s|\n", string);
    // output: |%.5f %.5f %.5f %.5f %.5f|
    free(string);
    return (0);
}
int x;
for(x=0;x<20;x++)
printf("%d", x);




It's just a diagram. In the 
body of the for loop, you 
can independently determine 
what exactly printf ( )will print.