TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: erdanieee 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
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í:
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?
-
En los que son mas de una variable coloca %s
Saludos!
-
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'
-
Estás imprimiendo un apuntador y no su contenido.
Debes corregirlo usando el índice.
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.
-
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!
-
ok, muchas gracias, lo probaré esta noche.
Un saludo!
-
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:
printf("'%c'\n", 'A'); /* imprime 'A' */ printf("'%4c'\n", 'A'); /* imprime ' A' */ printf("'%04c'\n", 'A'); /* imprime '000A' */ 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:
printf("\t start: %c%c \n\r", data.
startBit[0], data.
startBit[1]); printf("\t toggle: %c \n\r", data.
toggleBit); for(i=0; i<5; i++)
....
Si no tienes putchar en tu libreria, printf("%c", data.addrBit) es lo mismo pero mas lento.
Espero que te sirva.
-
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 :-)