Como creo funciones con argumentos variables al estilo printf ó scanf Imprimir
Escrito por adrianvaca   
Martes, 22 de Marzo de 2011 23:12

Hay que usar funciones y constantes definidas en la biblioteca stdarg.h, por ejemplo:

double multiSuma(int operandos, ...) {

    double resultado = 0.0;
    va_list pa;

    va_start(pa, operandos);

    while (operandos--) {
        resultado += va_arg(pa, double);
    }

    va_end(pa);

    return resultado;
}



void pprintf(char *formato, ...) {

    char *p;
    va_list pa;

    va_start(pa, formato);

    for (p = formato; *p; p++) {

        if (*p != '?') {
            putchar (*p);
            continue;
        }

        switch (*++p) {
            case 'd':
                printf("(%d)", va_arg(pa, int));
                break;
            case 's':
                printf("(%s)", va_arg(pa, char *));
                break;
            default:
                putchar(*p);
                break;
            }
        }
        va_end(pa);
}



Y su uso sería:

int main (void) {

    printf("Resultado es %g", multiSuma(3, 0.3, 0.1, 0.2));
    pprintf("Probemos a poner parentesis a una ?s y a un ?d", "cadena", 25);

    return 0;
}



Puedes leer el siguiente artículo donde se explica todo esto en detalle...

 
Otros artículos