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 agregar ceros iniciales a una variable definida por el usuario en C utilizando sprintf?

Estoy trabajando en un programa en el que necesito agregar ceros iniciales a 3 números.

Entonces el código se ve así:

#include <iostream>

using namespace std;

// Check Examples

// Versión del compilador g++ 6.3.0

int main()
{
    long int num = 5;
    char CNum[10];
    sprintf(CNum, "%03ld", num);
    std::cout << CNum;
    return 0;
}

// Outputs 005

Ahora definamos el número de ceros iniciales en una variable entera llamada blank:

#include <iostream>

using namespace std;

// Check Examples

// Versión del compilador g++ 6.3.0

int main()
{
    int blank = 3;
    long int num = 5;
    char CNum[10];
    sprintf(CNum, "%0%dd", blank, num);
    std::cout << CNum;
    return 0;
}

Después de eso, el código debería verse así:

#include <iostream>

using namespace std;

// Check Examples

// Versión del compilador g++ 6.3.0

int main()
{
    int blank = 3;
    long int num = 5;
    char CNum[10];
    sprintf(CNum, "%03ld", num);
    std::cout << CNum;
    return 0;
}

Luego, edité los argumentos de sprintf de esta manera:

sprintf(CNum, "%0%dld", blank, num);

Y esto muestra:

%dld

En lugar de:

005

Ahora, mis preguntas principales son:

  1. ¿Puedo agregar ceros iniciales definidos por el usuario de esta manera en sprintf?
  2. Si sí, ¿cómo puedo hacer que mi código haga esto?
  3. Si no, ¿hay alguna otra forma de realizar la misma acción para obtener la salida deseada?

Gracias, espero sus amables respuestas…

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Respuesta:

    1. Sí, puedes agregar ceros iniciales definidos por una variable de usuario en sprintf utilizando el especificador de formato %0Xd, donde X es el número de dígitos que deseas rellenar con ceros iniciales, y d es el especificador de conversión para enteros decimales.
    2. Para hacer que el código funcione con ceros iniciales definidos por una variable de usuario, puedes modificar los argumentos de sprintf de la siguiente manera:

    sprintf(CNum, "%0*d", espacio en blanco, num);

    Esto rellenará la variable entera num con la cantidad de ceros iniciales especificada por la variable espacio en blanco.

    1. Otra forma de realizar la misma acción es usar un bucle para agregar los ceros iniciales antes de la variable entera. Aquí tienes un ejemplo:
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        int espacio en blanco = 3;
        long int num = 5;
    
        string strNum = to_string(num);
        int tamañoRelleno = espacio en blanco - strNum.length();
        if (tamañoRelleno > 0) {
            string cadenaRelleno(tamañoRelleno, '0');
            strNum = cadenaRelleno + strNum;
        }
    
        cout << strNum;
    
        return 0;
    }
    

    Este código convierte la variable entera en una cadena, calcula la cantidad de ceros iniciales necesarios y luego los agrega al principio de la cadena usando un bucle. Finalmente, muestra la cadena rellenada.

Comments are closed.