PDA

Ver la versión completa : Draw text y caracter de escape.



neglox
02/02/2006, 18:24
No estoy muy puesto en C y estoy teniendo problemas al pasar lo que leo de un fichero por pantalla.

Leo una linea asi
fgets(texto, 100, libro );
y luego la muestro por pantalla
drawText(screen, texto, 0, 0, 255, 255, 255);
Pero claro al final de linea esta el \n que draw text me lo interpreta como un "bonito" cuadradito :mad:

Hay alguna instruccion que me permita quitarlo? Muchas gracias.

Puck2099
02/02/2006, 18:30
No estoy muy puesto en C y estoy teniendo problemas al pasar lo que leo de un fichero por pantalla.

Leo una linea asi
fgets(texto, 100, libro );
y luego la muestro por pantalla
drawText(screen, texto, 0, 0, 255, 255, 255);
Pero claro al final de linea esta el \n que draw text me lo interpreta como un "bonito" cuadradito :mad:

Hay alguna instruccion que me permita quitarlo? Muchas gracias.

¿Ese drawText viene con las SDL o lo has programado tú?

Saludos

neglox
02/02/2006, 18:33
Creia que era una funcion de SDL y ya veo que no, es codigo que estoy tomando prestado del sdl test, ya que estoy aprendiendo editando ese codigo.Hace algo asi como:

void drawText(SDL_Surface* screen, char* string, int x, int y, int fR, int fG, int fB)
{
SDL_Color foregroundColor = { fR, fG, fB };
SDL_Surface* textSurface = TTF_RenderText_Blended(font,string, foregroundColor);
SDL_Rect textLocation = { x, y, 0, 0 };
SDL_BlitSurface(textSurface, NULL, screen, &textLocation);
SDL_FreeSurface(textSurface);
}

Casiuss
02/02/2006, 18:52
No estoy muy puesto en C y estoy teniendo problemas al pasar lo que leo de un fichero por pantalla.

Leo una linea asi
fgets(texto, 100, libro );
y luego la muestro por pantalla
drawText(screen, texto, 0, 0, 255, 255, 255);
Pero claro al final de linea esta el \n que draw text me lo interpreta como un "bonito" cuadradito :mad:

Hay alguna instruccion que me permita quitarlo? Muchas gracias.


int i;

for (i=0; (texto[i] != '\n')&&(texto[i] != '\0'; i++);

texto[i] = '\0';



Hay otras soluciones como ir de atras hacia delante pero esta sirve i no requiere string.h.
Lo que hace es avanzar letra por letra hasta que encuentra un salto de linea. Entonces sobreescrive el salto de linea con un fin de cadena. Si lo pones con una cadena que no tenga '\n' no tienes el riesgo que se salga del array...


PS: Aprovecho para presentarme en este magnifico foro :D

Puck2099
02/02/2006, 18:57
int i;

for (i=0; (texto[i] != '\n')&&(texto[i] != '\0'; i++);

texto[i] = '\0';



Hay otras soluciones como ir de atras hacia delante pero esta sirve i no requiere string.h.

Uhm, ¿eso no cambiaría solo el primer caracter \n o \0 que se encuentre?



PS: Aprovecho para presentarme en este magnifico foro que hace tiempo que leo :D

Pues bienvenido :)

Saludos

neglox
02/02/2006, 18:58
Bienvenido. Creo que me sirve ahora lo prueba y te digo. Si no me equivoco eso busca el primer \n que encuentre y lo cambia por \0 no?

Casiuss
02/02/2006, 19:02
Uhm, ¿eso no cambiaría solo el primer caracter \n o \0 que se encuentre?

Él coge una cadena con fgets y esta función deja de leer al primer \n que encuentra. una solución más general seria canviar for (i = strlen (texto); ... ; i--);

neglox
02/02/2006, 19:08
Muchas gracias me has solucionado la duda, es que venir de lenguajes simples y empezar a ver arrays de char como string asi como el tema de punteros todavia me tiene un poco verde.

neglox
02/02/2006, 19:30
Me ha solucionado en Windows con dev-c++ pero en la gp2x no hace nada... :loco: sigue apareciendo el cuadradito.
fgets(texto, 100, libro );
for (i=0; (texto[i] != '\n')&&(texto[i] != '\0'); i++);
texto[i] = '\0';

neglox
02/02/2006, 21:01
Despues de lagrimas sudor y sangre consigo hacerlo funcionar.Porque windows y linux se empeñaran en usar un formato de final de linea distinto. Queda despues de todo asi la odisea:
fgets(texto, 100, libro );
texto[strlen(texto)-2]='\0';

Gracias a todos los que me habeis ayudado con esta...tonteria? Si se puede llamar asi.

Casiuss
03/02/2006, 03:17
Despues de lagrimas sudor y sangre consigo hacerlo funcionar.Porque windows y linux se empeñaran en usar un formato de final de linea distinto

Si te digo que estuve a punto de suspender programacion por este mismo problema en una práctica, aún teniendo un 8 en los examenes... :loco:

Te recomiendo que utilizes Notepad++ i allí selecciones que te ponga el archivo en formato de UNIX. Tiene más lògica así porquè la gp2x funciona con Linux, no? Así podràs leer de la misma manera ficheros escrito en un editor tu mismo i ficheros que hayan escrito tus programas.