为新数据类型(向量)实现printf

Yak*_*kov 1 c printf vector

我已经实现printf了矢量类型.向量类型中的值表示为(element1,element2,...)例如,对于大小为3的向量,可能的值可以是(1,2,3)

我的实现printf是:

int my_printf(const char *format,...)
{
    va_list args;
    int argSize = 1; // get the number of elemts in vector
    const char* vec;
    vec = strchr(format,'v');
    if(vec != NULL)
        argSize = atol(vec + 1);
    va_start (args, format);
    int i = 0,ret = 0;

    do // print all elements
    {
        ret = vprintf ("%d ", args);
        fflush(stdout);
        va_arg(args,float);
    } while(i < argSize);
    va_end (args); 

    return ret; 
}

int main()
{
    my_printf("v3",(10,12,13));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

va_start (args, format);args获得值13打印它,而接下来的两个打印打印0(args = 0)可能是什么解决方案?

Vla*_*lad 5

(10,12,13)代表单个数字13.它是逗号运算符,是C语言的一个非常特殊的特性.

所以你的代码等同于:

int temp = (10,12,13); // now temp == 13
my_printf("v3", temp);
Run Code Online (Sandbox Code Playgroud)

在C中,没有从C++中已知的向量类型.只有阵列.您可以像这样初始化数组:

int array[] = {10, 12, 13};
Run Code Online (Sandbox Code Playgroud)

- 并使用数组作为参数my_printf.