/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Duda, paso de un valor de una funcion a otra funcion

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Beiker



Registrado: 25 Mar 2006
Mensajes: 34

MensajePublicado: 13/02/2009 2:38 am
Título: Duda, paso de un valor de una funcion a otra funcion

Hola,

En este codigo que ahora les pongo tengo una funcion llamada generar_numero la cual me genera un numero aleatorio, lo que pasa que me gustaria pasar el numero de dentro de esa funcion a otras funciones que tengo, porque por ejemplo en la funcion realizar_apuestas, no me coje el numero generado por el random, sino me coje el 0 de la inicializacion de la declaracion de la variable.

Saludos a todos/as

Beiker

Aqui adjunto el codigo:

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

#define VECTOR 3

/*Declaracion de las variables a utilizar durante el programa*/
struct tjuego{
int njugador;
int credito;
int apuestas_ganadas;
int perdido;
int apostado;
int numero;
int dinero;
};

struct tjuego juego[VECTOR];


void generar_numero(int num);
int resolver_credito(struct tjuego juego[]);
int realizar_apuestas(int num,struct tjuego juego[]);


int main(){


int i=0;
int num=0;

for(i=1;i<VECTOR;i++){
juego[i].credito=1000;
}

generar_numero(num);
resolver_credito(juego);
realizar_apuestas(num,juego);

}

void generar_numero(int num)
{

srand(time(0));
num=rand()%39;


}

/*La funcion genrar numero la tengo bien*/

/*Esta funcion de resolver credito tambien la tengo ok */
int resolver_credito(struct tjuego juego[]){

int i=0;
int credito=0;

for(i=1;i<VECTOR;i++){
printf("Eres el jugador %d\n",i);
printf("******************\n");
printf("\n");
printf("Cuanto credito quieres apostar:\n");
scanf("%d",&credito);
/*Aqui lo que haremos es calcular el dinero que apostamos base al credito que tenemos*/
juego[i].dinero=credito*0.20;
printf("Has apostado %d dinero\n",juego[i].dinero);
juego[i].credito=juego[i].credito-credito;
printf("Tienes en tus arcas %d\n",juego[i].credito);
printf("\n");

}
}

int realizar_apuestas(int num,struct tjuego juego[]){

int i=1;
int num=0;


for(i=1;i<VECTOR;i++){
printf("Eres el jugador %d\n",i);
printf("Introduce un numero:\n");
scanf("%d",&juego[i].numero);
if(num==juego[i].numero){
printf("Has ganado el preimio ti ru ti ru ti ru ti\n");
juego[i].dinero=juego[i].dinero*juego[i].dinero;
printf("Has ganado %d",juego[i].dinero);
}else if(num!=juego[i].numero){
printf("No has ganado el premio:\n");
}
}
}
Volver arriba
MatZ



Registrado: 23 Sep 2004
Mensajes: 139
Ubicación: Valencia

MensajePublicado: 13/02/2009 3:56 am
Título:

Hola, el problema que tienes es que modificas num dentro de la función generar_numero y como el parámetro lo pasas por valor ese cambio únicamente es visible dentro de la función. Al terminar la función y volver a la siguiente línea de código desde donde realizas la llamada, esa variable contendrá el valor anterior.

Para solucionarlo tienes que pasar el parámetro por referencia, es decir pasarle un puntero. La función quedaría de la siguiente manera:

Código:
 
void generar_numero(int *num)
{
   srand(time(0));
   *num=rand()%39;
}


y la llamada a la función sería:
Código:
 generar_numero(&num);


También podrías hacer que en vez de devolver el numero por el parametro lo devolviese por el retorno de la función.
Volver arriba
Beiker



Registrado: 25 Mar 2006
Mensajes: 34

MensajePublicado: 13/02/2009 5:04 am
Título: Merci tio

Gracias tio, es que no me acordaba tanto del tema de punteros y del paso por referencia
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com