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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9
21  Programación / Programación C/C++ / 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.
22  Programación / Programación C/C++ / Re: ¿Es normal hacer este tipo de conversiones de punteros void? en: 16 Mayo 2011, 22:40 pm
Muchas gracias, ¿como es eso  :D? ¿Podrías ponerme un ejemplo por favor?
Mas o menos me situó pero no se como picar el código xD

Quieres decir una estructura con un enum dentro que contendría dos elementos, médicos y pacientes, ¿no? ¿Pero como hago para saber el tipo?
23  Programación / Programación C/C++ / Re: ¿Es normal hacer este tipo de conversiones de punteros void? en: 16 Mayo 2011, 18:54 pm
Muchas gracias, no estoy seguro de haberlo entendido bien, pero creo que es algo así como que lo puedo usar para punteros que apunten a un dato el cual yo no voy a modificar desde una función, si no solo a comprobar su valor, como en mi caso, pero no podría usarlo por ejemplo para punteros que apuntaran a otro puntero con el fin de modificar el valor de este ultimo.

¿Lo he entendido bien?

Un saludo.
24  Programación / Programación C/C++ / ¿Es normal hacer este tipo de conversiones de punteros void? en: 16 Mayo 2011, 15:27 pm
Hola, tengo la siguiente duda:

En una funcion convierto los punteros void según lo necesite, es decir según el que le pase, lo que no se si es esto es una practica aceptada en C, compilar y funcionar funciona pero no se si debe hacer o no, o hacer esto puede acarrear fallos en algunos programas.
Me gustaría saber si es algo así como una practica que se puede hacer pero que debe evitarse en el mayor de los casos.

Esta es la función, lo que hago es convertir al tipo "medicos" o "pacientes" dependiendo de si "opc" es 0 u 1.
Al hacer la llamada solo el puntero que le pase a la función puede ser tanto del tipo
"medicos" como del "pacientes".
Código
  1. bool val_dni(void *primero,int dni,bool opc){
  2.    medicos *auxM;
  3.    pacientes *auxP;
  4.    int m = 0;
  5.    int p = 0;
  6.    /* 0 para medicos, 1 para pacientes.
  7.        0 si no existe, 1 si existe.  
  8.     */
  9.  
  10.    if(opc == 1){
  11.  
  12.           auxP = (pacientes *)primero;
  13.           while(auxP != NULL){
  14.                        if(auxP->dni == dni){ return 1; }
  15.                        auxP = auxP->next;
  16.                     }
  17.           return 0;
  18.    }else{
  19.          auxM = (medicos *)primero;
  20.          while(auxM != NULL){
  21.                        if(auxM->dni == dni){return 1; }
  22.                        auxM = auxM->next;
  23.                     }
  24.          return 0;
  25.    }
  26. }

Un saludo.
25  Programación / Programación C/C++ / Re: Cargar Lista de un fichero con fseek a una lista auxiliar en el programa. en: 12 Mayo 2011, 23:25 pm
Solucionado. Disculpen las molestias.
26  Programación / Programación C/C++ / Re: Sustitución de Break por otra cosa. en: 12 Mayo 2011, 23:25 pm
Muchas gracias por la respuesta :D
Al final he hecho lo que dices, ya que era con la función fread y retornando el valor es mas seguro que lo que quería hacer.
27  Programación / Programación C/C++ / Re: Sustitución de Break por otra cosa. en: 12 Mayo 2011, 19:11 pm
Muchas gracias, eso si lo leí que traía de cabezas a los programados antes de la programación estructurada.

Un saludo.
28  Programación / Programación C/C++ / Re: Sustitución de Break por otra cosa. en: 12 Mayo 2011, 18:39 pm
Gracias :D Ya veo que no lo esta, pues no lo recuerdo, creo que lo leí en un  blog que el go to y el break estaban obsoletos.

Un saludo.
29  Programación / Programación C/C++ / Sustitución de Break por otra cosa. en: 12 Mayo 2011, 17:48 pm
Hola buenas.

Tengo una duda, según tengo entendido el uso del break en C esta obsoleto, pero sin embargo tengo un while donde lo tengo que usar por fuerza, quiero saber si el problema es mio, es decir que estoy haciendo algo mal y ese break se puede sustituir por otra cosa, o es que en realidad hay casos donde el uso del break es esencial.

La estructura que uso ahora es esta:
Código
  1. while(1) {
  2. if(feof(fp)){break;}
  3. ...
  4. }

Ya que si uso esto:
Código
  1. while(!feof(fp)){
  2. ....
  3. }
me lee una vez de mas el archivo, es decir es como si se ejecutara el bucle una vez mas a lo que quiero..

Un saludo.
30  Programación / Programación C/C++ / Cargar Lista de un fichero con fseek a una lista auxiliar en el programa. en: 9 Mayo 2011, 17:34 pm
Hola buenas.

Tengo el siguiente problema que no consigo resolver y por mas que busco en el foro y en Internet no encuentro la forma de solucionarlo.

Tengo una lista en un fichero que previamente he insertado con fwrite, lo que quiero hacer es leer la lista de ese fichero con fseek y cargarla en una lista auxiliar para que el programa trabaje con ella (por ejemplo insertar datos) luego volvere a escribir el fichero entero y cada vez que quiera escribir en esa lista, la cargare en una auxiliar y trabajare con ella para volverla a guardar en el programa.

La función que he hecho para esto, es la siguiente:


Código
  1. medicos * read_fic(void){
  2. FILE *fp;
  3. medicos *aux,aux2,*first;
  4. fp = fopen("medicos.bin","r+b");
  5. fseek (fp, 0L, SEEK_SET);
  6. first = NULL;
  7.  
  8. do{
  9.   fread(&aux2,sizeof(medicos),1,fp);
  10.   aux = (medicos *)malloc(sizeof(medicos));
  11.  
  12.   if(first == NULL){first = aux;}
  13.   aux->dni = aux2.dni;
  14.   aux->fecha = aux2.fecha;
  15.   strcpy(aux->nombre,aux2.nombre);
  16.   strcpy(aux->apellidos,aux2.apellidos);
  17.  
  18.   /* sacar datos de una estructura dentro de una lista dentro de un fichero */
  19.  
  20.   strcpy(aux->direccion.calle,aux2.direccion.calle);
  21.   aux->direccion.bloque = aux2.direccion.bloque;
  22.   aux->direccion.numero = aux2.direccion.numero;
  23.  
  24.   aux->next = aux2.next;
  25.   /*
  26.    printf("#%d \t Fecha: %d",aux->dni, aux->fecha);
  27.    printf("\t#N: %s \t A: %s\t",aux->nombre, aux->apellidos);
  28.    printf("Calle: %s\n",aux->direccion.calle);
  29.    
  30.    
  31.    */
  32.   aux = aux->next;
  33.  }while(!feof(fp)); // (aux2.next != NULL);
  34.  
  35. fclose(fp);
  36. return first;
  37. }


El main quedaría así:
Código
  1. int main(){
  2.    medicos *primero;
  3.    primero = NULL;
  4.  
  5.   primero = read_fic();
  6. }

Pero esta función me da fallos de segmentación por todos lados, a parte de que estoy usando un puntero local a la función, por lo tanto el valor de aux se debería perder cuando retorne first que es un puntero al primer elemento de dicha lista, como resolvería este problema sin usar variables globales (por ejemplo haciendo que aux2 sea global).
De todas formas puede que tenga mas fallos a parte de ese, la función con la que cargo los datos del fichero en la lista.

Un saludo.
Páginas: 1 2 [3] 4 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines