/* Ejemplo de cómo convertir un número en una cadena y cómo
 * concatenar esa cadena con otra.
 * 
 * F. de Sande Martes 13.11.2001
 * Respuesta a una pregunta de un alumno.
 *
 * El código trata de ser claro, no "reutiliza" variables y
 * trata de ejemplificar una práctica clara de programación.
 * ===========================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_CAD 30                /* Tamaño máximo para las cadenas a convertir */
#define CERO '0'
#define EoS '\0'

char *unsigned_to_str(unsigned num);

char *unsigned_to_str(unsigned num) {
  static char cadena[MAX_CAD];    /* Cadena para hacer la conversión */
  char digit;                     /* Un dígito de la cadena (ASCII) */
  unsigned pos,                   /* Posición del dígito */
	   len,                   /* Long. de la cadena */
	   i;

  pos = 0;
  while (num != 0) {                             /* Capturamos los dígitos de la cadena, de */
    digit = CERO + (char)(num % 10);             /* menos a más significativos */
    num /= 10;
    cadena[pos++] = digit;
  }
  cadena[pos] = EoS;
  len = pos - 1;
  for (i = 0; i < len; i++) {     /* "Damos la vuelta" a la cadena intercambiando */
    digit = cadena[i];            /* sus dígitos */
    cadena[i] = cadena[len - i];
    cadena[len - i] = digit;
  }
  return cadena;
}
/* ======================================== */
int main(void) {
  unsigned num;
  char concatenar[MAX_CAD];
  char final[MAX_CAD];

  printf("Introduzca número: ");
  scanf("%u", &num);
  printf("Introduzca cadena a concatenar: ");
  scanf("%s", concatenar);
  strcpy(final, unsigned_to_str(num));
  strcat(final, concatenar);
  printf("%s\n", final);
}

