|
| Autor |
Mensaje |
mcmakia.696 Usuario Iniciado
Registrado: 04 Jun 2011 Mensajes: 15
|
Publicado: Lun 23 Ene, 2012 20:45 pm
Título del mensaje: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
HOLA,LO QUE PASA ES QUE QUIERO ASIGNARLE UN "INT" A UN "CHAR",PARA LUEGO MOSTRAR EL "CHAR" POR LA PANTALLA.CON QUE OBJETIVO,CON EL OBJETIVO DE QUE CUANDO EL VALOR DE LA VARIBLE "INT" VARIE,ENTONCES TAMBIEN LO HAGA EL "CHAR" QUE SE ESTA MOSTRANDO EN LA PANTALLA.ALGUIEN SABE COMO HACERLO?.
*NOTA: ES PARA UN PROGRAMA HECHO CON LA LIBRERIA GRAFICA SDL. |
|
|
|
| Volver arriba |
|
|
eduar2083 Usuario Activo

Registrado: 14 Nov 2008 Mensajes: 195 Ubicación: Lima - Perú
|
Publicado: Lun 23 Ene, 2012 21:12 pm
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
Hola. Antes que todo, recuerda que debes escribir en letras minúsculas, de lo contrario significa que estás gritando.
Respecto a tu problema, si estás trabajando con C/C++, recuerda que un char tiene tamaño de 1 byte, en el que puedes almacenar caracteres del conjunto ASCII o enteros en el rango [-128, 127]. Asignarle un valor que esté fuera de dicho rango provocará un error lógico en tiempo de ejecución. Ahora bien, si estás trabajando en modo gráfico probablemente debas realizar un refrescado a tu GUI para visualizar los cambios.
Un saludo. |
|
|
|
| Volver arriba |
|
|
Manuel González Usuario Activo

Registrado: 05 Jun 2011 Mensajes: 210 Ubicación: Venezuela-Miranda
|
Publicado: Lun 23 Ene, 2012 22:32 pm
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
saludos mackia.!
aun sigo sin ententer para que lo quieres hacer.
supondre q lo que quieres hacer es mostrar en pantalla un puntaje,vidas... en general:variables almacenadas en un int que como para imprimir texto con SDL_ttf solo lo puedes hacer con un string, necesitas comvertirla.
la solucion es trivial solo comviertes el int con sprintf.
ejemplo:
int vidas;
char texto[50];// no hace falta tanto
vidas=3;
sprintf("vidas:%d",vidas);
y listo lo demas corre por tu cuenta.!! |
“pero si estudias computación deberías saber usar todos los programas”
conclusion:Usuario no es gente.
http://baulprogramas.blogspot.com
|
|
| Volver arriba |
|
|
mr.xkr
Registrado: 18 Ene 2012 Mensajes: 5
|
Publicado: Lun 23 Ene, 2012 22:45 pm
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
Tambien puedes usar itoa, aunque mejor usar el sistema de sprintf.
En C++ concretamente también puedes hacer string(int numero), este es el método preferido por muchos.
cplusplus.com/reference/clibrary/cstdlib/itoa/
Por dios, esto de no poder publicar URLs es un desatino. Deberían bloquearse los 3 primeros mensajes xD
Saludos! |
|
|
|
| Volver arriba |
|
|
mcmakia.696 Usuario Iniciado
Registrado: 04 Jun 2011 Mensajes: 15
|
Publicado: Mar 24 Ene, 2012 04:17 am
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
EH BUENO, CREO QUE LA CUESTION ESTA EN CONVERTIR LA VARIABLE PERO NO SE COMO HACERLO JEJEJE,AQUI LES DEJO EL CODIGO PARA QUE ENTIENDAN UN POCO MAS:
| Código: |
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <string>
#include <iostream.h>
#include <stdio.h>
const FPS = 20; /*TODAVIA NO SERA UTILIZADA*/
SDL_Surface *PANTALLA = NULL;
SDL_Surface *OJAG = NULL;
SDL_Surface *TEXTO = NULL;
SDL_Rect MURO;
SDL_Rect RECTA_OJAG;
SDL_Rect RECTA_TXT;
SDL_Event EVENTO;
TTF_Font *FUENTE = NULL;
SDL_Color COLORTXT = { 253, 171, 2 };
char var1[];
int VELX, VELY;
bool FIN = false;
/*******************************************/
bool COLISION( SDL_Rect A, SDL_Rect B )
{
//LOS LADOS DE LOS RECTANGULOS
int leftA, leftB;
int rightA, rightB;
int topA, topB;
int bottomA, bottomB;
//CALCULAR LOS LADOS DE LA RECTA A
leftA = A.x;
rightA = A.x + A.w;
topA = A.y;
bottomA = A.y + A.h;
//CALCULAR LOS LADOS DE LA RECTA B
leftB = B.x;
rightB = B.x + B.w;
topB = B.y;
bottomB = B.y + B.h;
//SI ALGUNO DE LOS LADOS DESDE A ESTAN FUERA DE B
if( bottomA <= topB ){ return false; }
if( topA >= bottomB ){ return false; }
if( rightA <= leftB ){ return false; }
if( leftA >= rightB ){ return false; }
//SI NINGUNO DE LOS LADOS DESDE A ESTAN FUERA DE B
return true;
}
/***************************************/
int main( int argc, char* args[] ){
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
PANTALLA = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE);
OJAG = SDL_LoadBMP("img_1.bmp");
FUENTE = TTF_OpenFont( "lazy.ttf", 40 );
TEXTO = TTF_RenderText_Solid( FUENTE, "Oscar J Acosta G", COLORTXT );
RECTA_OJAG.x = 0;
RECTA_OJAG.y = 0;
RECTA_OJAG.w = OJAG->w;
RECTA_OJAG.h = OJAG->h;
RECTA_TXT.x = 10;
RECTA_TXT.y = 10;
RECTA_TXT.w = TEXTO->w;
RECTA_TXT.h = TEXTO->h;
MURO.x = 250;
MURO.y = 500;
MURO.w = 400;
MURO.h = 30;
while( FIN == false )
{
//FPS.start();
while( SDL_PollEvent( &EVENTO ) )
{
if( EVENTO.type == SDL_QUIT ){ FIN = true; }
if( EVENTO.type == SDL_KEYDOWN )
{
switch( EVENTO.key.keysym.sym )
{
case SDLK_UP: VELY -= 5; break;
case SDLK_DOWN: VELY += 5; break;
case SDLK_LEFT: VELX -= 5; break;
case SDLK_RIGHT: VELX += 5; break;
}
}
else if( EVENTO.type == SDL_KEYUP )
{
switch( EVENTO.key.keysym.sym )
{
case SDLK_UP: VELY += 5; break;
case SDLK_DOWN: VELY -= 5; break;
case SDLK_LEFT: VELX += 5; break;
case SDLK_RIGHT: VELX -= 5; break;
}
}
if(EVENTO.key.keysym.sym == SDLK_ESCAPE){ FIN =1; }
}
RECTA_OJAG.x+= VELX;
RECTA_OJAG.y+= VELY;
if(RECTA_OJAG.x<=0)RECTA_OJAG.x=0;
if(RECTA_OJAG.x>=800)RECTA_OJAG.x=800;
if(RECTA_OJAG.y<=0)RECTA_OJAG.y=0;
if(RECTA_OJAG.y>=600)RECTA_OJAG.y=600;
if( COLISION( RECTA_OJAG,MURO) ){ RECTA_OJAG.x -= VELX; }
if( COLISION( RECTA_OJAG,MURO) ){ RECTA_OJAG.y -= VELY; }
SDL_FillRect( PANTALLA, &PANTALLA->clip_rect, SDL_MapRGB( PANTALLA->format, 0xFF, 0xFF, 0xFF ) );
SDL_FillRect( PANTALLA, &MURO, SDL_MapRGB( PANTALLA->format, 0x77, 0x77, 0x77 ) );
SDL_BlitSurface(OJAG, NULL, PANTALLA, &RECTA_OJAG);
SDL_BlitSurface(TEXTO, NULL, PANTALLA, &RECTA_TXT);
SDL_Flip( PANTALLA );
}
SDL_FreeSurface(TEXTO);
SDL_FreeSurface(OJAG);
TTF_CloseFont( FUENTE );
TTF_Quit();
SDL_Quit();
return 0;
}
|
|
|
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 2084 Ubicación: y*width+x
|
|
| Volver arriba |
|
|
mcmakia.696 Usuario Iniciado
Registrado: 04 Jun 2011 Mensajes: 15
|
Publicado: Mie 25 Ene, 2012 02:49 am
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
EN EL PROGRAMA SE MUESTRA UN RECTANGULO QUE SE MUEVE A TODAS LAS DIRRECIONES,Y COLISIONA CON UN RECTANGULO GRIS.LO QUE YO QUIERO HACER ES MOSTRAR EN PANTALLA LAS VERIABLES (x,y) DEL RECTANGULO PARA ASI SABER SU POSICION EXACTA.ENTONCES QUIERO MOSTRAR LAS VARIABLES EN LA PANTALLA CON ESTA INSTRUCCION PERO CUANDO LO INTENTO EL COMPILADOR ME DICE QUE NO PUEDO IMPRIMIR LA VARIABLE.ENTOCES COMO LO HAGO?
TEXTO = TTF_RenderText_Solid( FUENTE, "Oscar J Acosta G", COLORTXT ); |
|
|
|
| Volver arriba |
|
|
Manuel González Usuario Activo

Registrado: 05 Jun 2011 Mensajes: 210 Ubicación: Venezuela-Miranda
|
Publicado: Mie 25 Ene, 2012 18:46 pm
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
jo. eso ya se te fue explicado. te aconsejo que prestes mas atencion a los comentarios q ponemos. especialmente a tu tutorial de programacion. |
“pero si estudias computación deberías saber usar todos los programas”
conclusion:Usuario no es gente.
http://baulprogramas.blogspot.com
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 2084 Ubicación: y*width+x
|
Publicado: Jue 26 Ene, 2012 00:48 am
Título del mensaje: Re: ¿COMO ASIGNAR UN ENTERO A UNA CADENA? |
|
|
Vale, ahora si entiendo tu problema, el caso es que trabajamos con C, y la función toma solamente una cadena char.... vemoas mmmmm ah!
Primero creamos una cadena con tamaño similar al número de dígitos del número a mostrar. Por ejemplo para valores que no superen 3 cifras, definimos un array char de longitud 3 o 4 por si acaso.
| Código: | int puntuacionVida=256;
char numero[4];
... |
ok, Luego pasamos el número a la cadena con la fantástica función de C , sprintf(), que nos permite entre cosas darle formato a una cadena, con el fin de que nos quede más bonita, pero el caso es que la usaremos para eso, para pasar un número a una cadena.
| Código: | sprintf(numero,"%s",puntuacionVida);
...
|
ok una vez que ya disponemos de la cadena, a lo mejor nos gustaría que se imprimiera junto con otros valores o con un texto acompañado. Entonces lo recomendable sería que no trabajaras directamente con el texto en la misma función, si no que usaras una cadena definida en una variable que sirviera para poner lo que quisiéramos y que luego se pasaría a la función.
Por ejemplo:
| Código: | char marcado[80];
//Asignamos texto al marcador....
strcpy(marcador,"vida:");
//concatenamos la puntuacion de la vida
strcat(marcador, numero);
//concatenamos más texto informativo
strcat(marcador," puntos:");
// Pasamos los puntos a la cadena de numeros, por aquello de reciclar variables
sprintf(numero,"%s",puntos); // puntos = 1000
// volvemos a concatenar...
strcat(marcador,numero);
...
...
|
ahora "marcador" debería ser igual a "vida:256 puntos:1000", así solamente tendrías que pasarla a la función que imprime el texto.
Espero que hayas entendido el procedimiento.
| Código: |
TEXTO = TTF_RenderText_Solid( FUENTE, marcador, COLORTXT );
...
|
Suerte  |
http://www.youtube.com/watch?v=-lT1zCukNQY
|
|
| Volver arriba |
|
|