elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Función que retorna dos tipos distintos de datos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Función que retorna dos tipos distintos de datos.  (Leído 7,292 veces)
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Función que retorna dos tipos distintos de datos.
« en: 16 Mayo 2011, 22:58 pm »

Saludos.
Una duda que me ha surgido y no consigo resolver, quiero que una función devuelva un 1 en caso de que se haya hecho todo correctamente o un 0 en caso de error, pero a su vez esa función devolverá un puntero de estructura, ¿como puedo solucionar esto? ya que si pongo "return 1" por ejemplo me da error en la conversión de datos.

Un saludo.


En línea

El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #1 en: 16 Mayo 2011, 23:28 pm »

que la funcion retorne un int (return 1 por ejemplo) y la estructura la devuelves mediante referencia ya sea por punteros o por el simbolo &.

Por referencia directa
Código
  1. int funcion (tipo_struct &estructura) //Declaracion de la funcion
  2. funcion(estructura) //Modo de uso

Por punteros
Código
  1. int funcion (tipo_struct *estructura) //Declaracion de la funcion
  2. funcion(&estructura) //Modo de uso

Creo que por punteros era asi, pero no estoy del todo convencido xD


En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #2 en: 17 Mayo 2011, 00:31 am »

Gracias por la respuesta, pero creo que estas confundido, lo que tu haces es pasarle un puntero por referencia a la función y que la función retorne un entero.

Lo que yo quiero es que internamente la función según unas condiciones retorne o bien un entero si hay error o una estructura en caso de que todo sea correcto.

Un saludo : D .
En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #3 en: 17 Mayo 2011, 01:17 am »

Tienes que hacerlo como dice El_Java...

Otra cosa sería devolver una estructura con 2 posiciones, donde en una se guarde el int y en otra la estructura, pero eso me parece una chorrada y un lío.
En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #4 en: 17 Mayo 2011, 01:20 am »

Muchas gracias, pero hago eso y no me compila, me da error en la conversión , pongo el código a continuación:
Código
  1. pacientes * read_ficP(pacientes *primero){
  2. FILE *fp;
  3. storage infoP;
  4. int a = 1;
  5. pacientes *aux,aux2;
  6.  
  7. if((fp = fopen("clinicaP.bin","r+b")) == NULL) {printf("Error al abrir el archivo"); return 0;}
  8. fseek (fp, 0L, SEEK_SET);
  9.  
  10. /* Es mejor usar este fragmento, ya que en caso de fallo de fread, hay menos posibilidades de que se
  11.  produzca fallo de segmentación */
  12.  
  13.  while(1){
  14.   if(fread(&aux2,sizeof(pacientes),1,fp) < 1){fclose(fp); return primero;}
  15.   infoP.dniP = aux2.dni;
  16.   strcpy(infoP.nombreP,aux2.nombre);
  17.   infoP.dniM = aux2.dniM;
  18.   add_nodP(&primero,infoP);
  19.  }
  20. return 1;
  21. }

Un saludo y gracias.
En línea

Lx

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #5 en: 17 Mayo 2011, 06:09 am »

Que te puedo decir capo :-\ ...

Se supone que si estás cambiado los datos de la estructura por referencia y retornado valores enteros ya no se pone como tipo de la función la estructura, sino simplemente un "int". Así:

Código
  1. int read_ficP(pacientes *primero){
  2. FILE *fp;
  3. storage infoP;
  4. int a = 1;
  5. pacientes *aux,aux2;
  6.  
  7. if((fp = fopen("clinicaP.bin","r+b")) == NULL) {printf("Error al abrir el archivo"); return 0;}
  8. fseek (fp, 0L, SEEK_SET);
  9.  
  10. /* Es mejor usar este fragmento, ya que en caso de fallo de fread, hay menos posibilidades de que se
  11.  produzca fallo de segmentación */
  12.  
  13.  while(1){
  14.   if(fread(&aux2,sizeof(pacientes),1,fp) < 1){fclose(fp); return primero;}
  15.   infoP.dniP = aux2.dni;
  16.   strcpy(infoP.nombreP,aux2.nombre);
  17.   infoP.dniM = aux2.dniM;
  18.   add_nodP(&primero,infoP);
  19.  }
  20. return 1;
  21. }

¿Simple?. A veces, cuando uno va aprendiendo más,  se confunde en lo básico  ;).
« Última modificación: 17 Mayo 2011, 06:12 am por Lx » En línea

Sauruxum

Desconectado Desconectado

Mensajes: 117


Ver Perfil WWW
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #6 en: 17 Mayo 2011, 07:05 am »

A los tiempos que no vuelvo al foro xD.

Si quieres una alternativa puedes tambien sobrecargar la funcion, pero debes estar atento de cuando usas una y cuando usas la otra de modo que el compilador no de errores. Otro problema con esto es que tendras que controlar el error a parte en otro pedazo de codigo.

Aun asi, como te lo han puesto apenas arriba esta perfecto!

Saludos
En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #7 en: 17 Mayo 2011, 11:58 am »

Muchísimas gracias por la respuesta, disculpadme igual no me explique bien, la función no recibe el valor por referencia si no por valor, ya que "pacientes *primero" es un puntero a una lista del tipo pacientes que antes he definido, entonces lo que hago es mandar ese puntero por valor a la función y que luego retorne ese puntero.

Igual esto es lo raro que hago que debería simplemente mandar por referencia el puntero y dejarme de retornos, vamos que es una tontería mandar a la función un puntero y devolver el mismo xD.

Muchas gracias Sauruxum, ¿que significa sobrecargar la función?.

Un saludo.
En línea

Sauruxum

Desconectado Desconectado

Mensajes: 117


Ver Perfil WWW
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #8 en: 17 Mayo 2011, 22:05 pm »

Sobrecargar una funcion es basicamente ponerle el mismo nombre a funciones que hacen cosas distintas ( por ejemplo que devuelvan tipos distintos o que tomen variados argumentos ), aunque ahora que me doy cuenta quizas digo una tonteria, ya que creo que la sobrecarga solo vale para el C++.
Aun asi, si fuera el caso de hacerlo en C++. te haces una funcion que regrese el estado de error y con el mismo nombre la funcion que devuelva el puntero a estructura y en caso de error devuelva un puntero nulo. No se, si no es con sobrecarga o directamente clases, creo que la de mas arriba funciona adecuadamente si la examinas bien, ya que dupongo que si vas a retornar un puntero a struct, me apostaria a que estas usando alocacion dinamica tambien.

Saludos
En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Función que retorna dos tipos distintos de datos.
« Respuesta #9 en: 18 Mayo 2011, 20:52 pm »

Ya entendí mas o menos jeje, es que de C++ no estoy muy puesto, de todas formas vi mi error, la verdad que si paso una variable por referencia no necesito que la función la retorne, es una tontería hacer eso, así puedo devolver enteros en caso de fallos.

Un saludo y gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines