Реализация printf для нового типа данных (вектор) - PullRequest
1 голос
/ 21 октября 2011

Я реализовал 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) Какое может быть решение?

1 Ответ

5 голосов
/ 21 октября 2011

(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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...