Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pintar parametros

Estas en el tema de Pintar parametros en el foro de C/C++ en Foros del Web. Hola, queria hacer un programa que pintase las variables que se le pinten como parametros, pudiendom ser enteros o cadenas de caracteres. Lo he hecho ...
  #1 (permalink)  
Antiguo 17/06/2011, 02:12
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Pintar parametros

Hola, queria hacer un programa que pintase las variables que se le pinten como parametros, pudiendom ser enteros o cadenas de caracteres.

Lo he hecho en DevC++ y funciona. Uno de los parámetros es un string del tipo "para escribir parametro1 %d parametro 2 %s", y el resto de apraemtros son los propios a pintar.

Lo que hago es ver en la cadena si hay %d o %s y enc ada caso hago un printf con %s o %d. Para ir sacando los parametros (que son opcionales) utilizo las funciones va_arg, va_start.

El problema viene cuando el mismo código lo ejecuto en VisualC++, no funciona!
Se me escapa por qué en DevC++ si y en VisualC++ no.

Un saludo.


Código:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>


int cuantos_parametros(const char* texto)
{
     int i;
     int numero_parametros = 0;
     
     for (i=0;i<strlen(texto);i++)
     {   
         if (texto[i] == '%'){numero_parametros++;}
     }
     
     return(numero_parametros);
}

char tipo_parametro(const char* texto, int numero_de_parametro)
{
     int i=0;
     int cuantos_encontrados = 0;
     int encontrado = 0;
     char tipo;

     while ((i<strlen(texto)) && (encontrado == 0))
     {   
         if (texto[i] == '%')
         {     
                cuantos_encontrados++;
                if (cuantos_encontrados == numero_de_parametro)
                {    
                     encontrado = 1;
                     if (texto[i+1] == 'd'){tipo = 'd';}
                     if (texto[i+1] == 's'){tipo = 's';}
                }
         }
         i++;
     }
     
     return(tipo);
}


void syslog(int no_sirve_fichero, const char *texto, ...)
     
{
    int i;
    int numero_parametros;
    int vald;
    const char* vals; 
    char tipo;
    va_list vl;
  
    printf ("%s\nparametros: ", texto); /* Se pinta el texto */
    numero_parametros = cuantos_parametros(texto);

    va_start(vl,numero_parametros);
   
    for (i=0;i<numero_parametros;i++) /* Se pinta cada parametro */
    {    
         tipo = tipo_parametro(texto, i+1);;

        if (tipo == 'd') /* Si es int... */
        {   
            vald=va_arg(vl,int);
            printf ("%d  ",vald);
        }
        else /* Si es string */
        {   
            vals=va_arg(vl,const char*);
            printf ("%s  ",vals);
        }
     }
     va_end(vl);
     printf ("\n\n");
}



int main ()
{int g;

  int totalChecksum = 0;
  const char *cadena = "hola";

  syslog( 2 | 1, "\n NOTICE(rcimDataChecksumTopology): %d %s\n",totalChecksum, 0, cadena);
  scanf("%d\n", g);
  return 0;
  
}

Etiquetas: parametros, pintar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:27.