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

发布于 2024-12-10 19:56:06 字数 759 浏览 0 评论 0原文

我已经为向量类型实现了 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;
}

当 va_start (args, format); args 获取值 13 时打印它,并在接下来的两次打印中打印 0 (args = 0) 解决办法是什么?

I have implemented printf for vector type. The values in vector type are represented as (element1,element2,...) For example for vector of size 3, a possible value could be (1,2,3)

My implementation for printf is:

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

While va_start (args, format); args gets value 13 prints it and for the next two printings prints 0 (args = 0)
What could be the solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

土豪 2024-12-17 19:56:06

(10,12,13)​​ 代表单个数字 13。它是 逗号运算符,C语言中相当奇特的特性。

所以你的代码相当于这样:

int temp = (10,12,13); // now temp == 13
my_printf("v3", temp);

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

int array[] = {10, 12, 13};

-- 并将该数组用作 my_printf 的参数。

(10,12,13) represent the single number 13. It's comma operator, quite peculiar feature of C language.

So your code is equivalent to this:

int temp = (10,12,13); // now temp == 13
my_printf("v3", temp);

In C, there is no vector type as it's known from C++. There are only arrays. You could initialize array like this:

int array[] = {10, 12, 13};

--and use the array as an argument for my_printf.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文