es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se formatean los especificadores de escritura “for” en español?

std::string x = "test %d test %d";

for (int i = 0; i < 2; i++)
{
 x = x, 1;
}
printf(x);
std::string x = "test %d test %d"; // x can be changed. This is an example.
int index = 2; // index can be changed. This is an example.

for (int i = 0; i < index; i++)
{
 test(x, i)
}

printf(x)

El código de ejemplo es el siguiente:

std::string x = "test %d test %d";

for (int i = 0; i < 2; i++)
{
 x = x, 1;
}
printf(x);

El resultado de ejemplo es: test 1 test 512765712

Yo quiero: test 1 test 1

¿Cómo puedo hacer eso?

He cambiado la pregunta porque la gente no la entiende.

const char* Test(const char* testx, ...)
{
    char tested[1024 + 1];
    va_list args;

    va_start(args, tested);
    vsnprintf(tested, sizeof(tested), testx, args);
    va_end(args);

    const char* testx(tested);

    return testx;
}

std::string x = "test %d test %d"; // x puede cambiar. Esto es un ejemplo.
int index = 2; // index puede cambiar. Esto es un ejemplo.

for (int i = 0; i < index; i++)
{
 test(x, i)
}

printf(x);

Resultado: test 1 test 5125219

Yo quiero: test 0 test 1

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada “test 0 test 1”, es necesario modificar el código en dos lugares:

    1. En la función Test(), cambia el especificador de formato “%d” por “%s”. Esto se debe a que estamos pasando una cadena como argumento, no un número entero. La función actualizada debería verse así:
    const char* Test(const char* testx, ...)
    {
        char tested[1024 + 1];
        va_list args;
    
        va_start(args, testx);
        vsnprintf(tested, sizeof(tested), testx, args);
        va_end(args);
    
        const char* result(tested);
    
        return result;
    }
    
    1. En el bucle for, pasa el valor de “i” como una cadena en lugar de un número entero. Esto se puede lograr utilizando la función std::to_string() en C++. El bucle for actualizado debería verse así:
    for (int i = 0; i < index; i++)
    {
        x = Test(x.c_str(), std::to_string(i).c_str());
    }
    

    Esto reemplazará el especificador de formato “%d” en la cadena con el valor de “i” como una cadena, lo que dará como resultado la salida deseada “test 0 test 1”.

Comments are closed.