[NDS] Imprimir variables

He cambiado mis funciones de texto de "PA_OutputText" por las de "PA_16cText", en las anteriores podia imprimir variables (%d, %s) muy facil como en C

Pero en PA_16cText no me aclaro como imprimir variables, la wiki d palib es un truño, no explican casi nada.. u.u

int var=0;
PA_16cText(0,28, 47, 255,50,"quiero mi variable aqui! %d",8, 3   ,100);
//Donde pongo var? xD


Gracias por adelantado ._.
No tengo ni idea de programar para NDS pero... ¿Que te impide meter tu variable en el string y despues imprimir solo el string?
¿Cómo la meto en el string? Lo había pensado, pero me he kedado K.O. xD

En java sería fácil
String s = new String();
int numero=0;
s="Mi numero: "+numero;


Pero en C/C++ no caigo en como hacerlo. ¿Quizás con alguna funcion d la libreria de srtlib?

En serio, estoy perdida ahora mismo xDD
La cosa es asi.

PA_16cText recibe un char*.

Tu tendras tu memoria reservada, por ejemplo char texto[10] y se lo pasaras a PA_16cText.

PA_16cText(0,28, 47, 255,50,texto,8, 3 ,100); (notese que no se que son los demas parametros, si lo dices mejor xD)

La cosa es, si tu tienes una variable de que puede tomar los valores de 0 a 999 (es decir, 3 digitos), puedes printar esta variable numerica de la siguiente manera:

texto[0] = '0'+(variable/100); /* de 832, nos quedamos con el 8 */
texto[1] = '0'+((variable/10) % 10); /* de 832 nos quedamos con 83 y hacemos modulo 10 para obtener el 3 */
texto[2] = '0'+(variable/1) % 10; /* de 832 nos quedamos con 832 y hacemos modulo 10 para el 2 */

Caso general:

for( j = 0; j < NumeroDigitos; j++)
texto[j] = '0' + ((int)(variable / pow(10,NumeroDigitos-1-j)) % 10);

texto[NumeroDigitos] = '\0';

Si es texto tal cual, copias posicion por posicion.

Prueba a ver xD
Darix, me has iluminado. Has puesto ese codigo feo y he recordado mi primer año de carrera XDDD
Recuerdo que nos hacian hacer ejercicios de pasar enteros a strings y me cagaba en todo porque nunca me salia, y tambien recorde que nos hicieron implementar la maldita funcion atoi.
Asi que he buscado la inversa de atoi, la itoa, y la funcion de strcat, y ya puedo meter variables int en el string :D

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

int main(void){
    int numero = 666;
    char cadena[25];
    char cad[50] = " ROFLMAO";

    itoa(numero,cadena,10);
    strcat(cadena, cad);
    printf("integer = %d string = %s\n",numero,cadena);
    return 0;
}


Salida por pantalla
integer=666 string=666 ROFLMAO


Gracias por vuesta ayuda [beer]

Por cierto, os dejo la cabecera de la función PA_16cText para que veáis los parámetros que hay que pasarle. La verdad es que esta mola mas que la función básica de texto:

PA_16cText(pantalla, int x1, int y1, int x2, int y2, char* string, int color, int size, int limit);

//Los colores van del 1-10, es ir probando xD

PA_16cText(1, 10, 10, 255, 20, "Hello World", 1, 0, 100);
¿Y no es más fácil usar sprintf?

int numero = 20;
char cadena[20];
sprintf(cadena,"Hola! %d",numero);
printf(cadena);
Darknoe escribió:Darix, me has iluminado. Has puesto ese codigo feo y he recordado mi primer año de carrera XDDD


Hombre gracias cawento cawento cawento cawento

Es que no se que librerias hay para eso, si todas las de C, algunas no o que xD Pero si, mas cutre no se podia hacer :p

De todos modos, si puedes usar el sprintf como dice el compañero, mejor y mucho mas rapido y facil
mmmm, me ha gustado ese sprintf... ya lo digo siempre, este hombre es un crack xD
Darknoe escribió:mmmm, me ha gustado ese sprintf... ya lo digo siempre, este hombre es un crack xD

Pero es que no buscas en las libs de C, hay muchas cosas que ya ha resuelto alguien por tí. xD Yo suelo echar un vistazo aquí: http://www.cplusplus.com/reference/clibrary/
Si esa web me la se de memoria, y el sprintf lo conocia, pero no sabia como iba XD

Ya que estoy aki preguntando chorradas, sabéis como puedo borrar el texto de la pantalla?

P.D: soy una pesada :P
Darknoe escribió:Si esa web me la se de memoria, y el sprintf lo conocia, pero no sabia como iba XD

Ya que estoy aki preguntando chorradas, sabéis como puedo borrar el texto de la pantalla?

P.D: soy una pesada :P

Pues ni idea, echa un vistazo a la documentación de PAlib. xD A malas, puedes probar imprimiendo espacios encima.

http://palib-dev.com/manual.html -> modules -> 16color pseudo-bitmap mode

Imagino que PA_16cErase valdrá.
Le he metido un PA_Init16cBg(0, 2); a saco y ha funcionado jaja

La PA_16cErase no me acaba de ir muy bien, me borra una mitad de la pantalla o.o

He visto en la definicion que es inline, ODIO las funciones inline de esta libreria, cada 2x3 me salen warnings de que la llamada a la funcion es muy larga y puede provocar errores en el inlining.
Darknoe escribió:Le he metido un PA_Init16cBg(0, 2); a saco y ha funcionado jaja

La PA_16cErase no me acaba de ir muy bien, me borra una mitad de la pantalla o.o

He visto en la definicion que es inline, ODIO las funciones inline de esta libreria, cada 2x3 me salen warnings de que la llamada a la funcion es muy larga y puede provocar errores en el inlining.

¿Tienes la última versión? Porque ese bug de borrar solo media pantalla creo que es de los que se han arreglado en las últimas...
Creo que no tengo la ultima, pero es que me da un palo actualizarla... [boing]
Darknoe escribió:Creo que no tengo la ultima, pero es que me da un palo actualizarla... [boing]

Ains... :-| Pues las últimas versiones la verdad es que han conseguido apañar bastantes de los fallos que tiene PAlib desde siempre, como la cosa esa de los EasyBg (va con macros, y todo es sencillo de usar hasta que pretendes cargar algo desde FAT...).
14 respuestas