Autor Tema: problema en CCS para imprimir una estructura  (Leído 3153 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
problema en CCS para imprimir una estructura
« en: 17 de Septiembre de 2010, 05:15:32 »
Buenas a todos. Quería plantearos mi problema a ver si alguien me echa una mano:

- tengo definida una estructura de esta forma
Código: [Seleccionar]
struct RC5Data {
   char startBit[2];
   char toggleBit;
   char addrBit[5];
   char cmdBit[6];
   }data;

y lo que quiero es poder imprimirlo a traves de rs232. En principio debería poder hacerse así:
Código: [Seleccionar]

printf("\t start: %2c \n\r", data.startBit);

printf("\t toggle: %c \n\r", data.toggleBit);

printf("\t address: %5c \n\r", data.addrBit);

printf("\t command: %6c \n\r", data.cmdBit);

pero no funciona (si no no estaría escribiendo en el foro). Tampoco funciona cambiando el tipo de variable del printf a String, ¿alguna idea?
« Última modificación: 17 de Septiembre de 2010, 05:37:20 por erdanieee »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema en CCS para imprimir una estructura
« Respuesta #1 en: 17 de Septiembre de 2010, 10:21:57 »
En los que son mas de una variable coloca %s


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: problema en CCS para imprimir una estructura
« Respuesta #2 en: 17 de Septiembre de 2010, 10:29:58 »
Tampoco funciona cambiando el tipo de variable del printf a String, ¿alguna idea?

Buenas Suky, gracias por responder, pero así tampoco funciona. Supongo que no se puede utilizar el tipo de variable String si no se incluye el caracter de terminación '\0'

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: problema en CCS para imprimir una estructura
« Respuesta #3 en: 17 de Septiembre de 2010, 10:38:07 »
Estás imprimiendo un apuntador y no su contenido.

Debes corregirlo usando el índice.

Código: [Seleccionar]
printf("\t start: %c \n\r", data.startBit[0]);
printf("\t start: %c \n\r", data.startBit[1]);

printf("\t toggle: %c \n\r", data.toggleBit);

printf("\t address: %c \n\r", data.addrBit[0]);
printf("\t address: %c \n\r", data.addrBit[1]);
printf("\t address: %c \n\r", data.addrBit[2]);
...

Si son cadenas lo que estás almacenando en los chars, entonces debes usar %s en vez de %c, pero el error que veo parece ser con los índices.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema en CCS para imprimir una estructura
« Respuesta #4 en: 17 de Septiembre de 2010, 10:40:05 »
Tampoco funciona cambiando el tipo de variable del printf a String, ¿alguna idea?

Buenas Suky, gracias por responder, pero así tampoco funciona. Supongo que no se puede utilizar el tipo de variable String si no se incluye el caracter de terminación '\0'
Claro, si o si hay que dejarle espacio para el carácter nulo. Sino como indica Mig. Pero puedes hacer %c%c",.....



Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: problema en CCS para imprimir una estructura
« Respuesta #5 en: 17 de Septiembre de 2010, 10:44:16 »
ok, muchas gracias, lo probaré esta noche.
Un saludo!

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: problema en CCS para imprimir una estructura
« Respuesta #6 en: 17 de Septiembre de 2010, 23:09:02 »
El formato "%6c" no indicanda que del origen se toman 6 caracteres.
El '%c' especifica que el origen debe ser interpretado como un caracter, sin importar el tipo de dato que realmente sea (raro? fijate el Kernighan).
El numero indica el ancho minimo del campo, dentro del cual puedes justificar a la izquierda o la derecha, o rellenar:

Código: C
  1. printf("'%c'\n", 'A');   /* imprime 'A' */
  2.         printf("'%4c'\n", 'A');  /* imprime '   A' */
  3.         printf("'%04c'\n", 'A'); /* imprime '000A' */
  4.         printf("'%-4c'\n", 'A'); /* imprime 'A   ' */

En tu caso podrias agregar un caracter mas a cada campo para terminarlo en cero e imprimirlo con "%s" como te sugiere Suky, o hacer algo asi:

Código: C
  1. printf("\t start: %c%c \n\r", data.startBit[0], data.startBit[1]);
  2.         printf("\t toggle: %c \n\r", data.toggleBit);
  3.         printf("\t address: ");
  4.         for(i=0; i<5; i++)
  5.                 putchar(data.addrBit[i]);
  6.         printf(" \n\r\");
  7.         ....

Si no tienes putchar en tu libreria, printf("%c", data.addrBit) es lo mismo pero mas lento.
Espero que te sirva.
@fabianjsm is on twitter

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: problema en CCS para imprimir una estructura
« Respuesta #7 en: 20 de Septiembre de 2010, 05:10:51 »
El numero indica el ancho minimo del campo, dentro del cual puedes justificar a la izquierda o la derecha, o rellenar:

efectívamente, había interpretado mal la ayuda. Al final lo he hecho como sugiere Suky, agregando un cero al final para poder imprimirlo como String.

Muchas gracias por vuestras respuestas, seguiré con mi mando a distancia :-)