Dudas en C

EtherMaN

Hola siento escribir varios mensajes esta semana sobre C pero es que tengo algunas dudas que me gustaría solventar antes de empezar la semana.

Estoy usando estructuras para realizar como una base de datos en un algoritmo y mi duda es la siguiente.

struct datos{
..campos.. dni,nombre.. etc
};
struct datos personas[25][3];

¿ Esto es lo mas apropiado para luego poder elegir la información que necesite ? ( Necesito 3 clases y 25 cosas en cada clase ).

Mi segunda pregunta es, si dentro de 'campos' tengo un char, ¿ puedo hacer lo de malloc para reservar justo la memoria que necesite y ser mas óptimo el código ?

Finalmente para guardar toda la información de las estructuras en un txt, ¿ es muy difícil ? para luego poder recuperar la información.

Espero que podáis ayudarme en alguna duda que tengo.

Un saludo y gracias por adelantado.

maRc

Si, es una manera de hacerlo.

Podrás hacerlo si es un puntero a char (char *). Aunque sería más recomendable utilizar un vector de tamaño fijo (char cadena[10]), para lo que comentas después.

Puedes guardarlo de dos maneras.
Escribiendo los campos uno a uno en un fichero, y así luego puedes editarlo a mano, aunque es más difícil de implementar.
O escribir toda la estructura directamente en un fichero. Busca como utilizar las llamadas fwrite y fread. Mejor esta manera que la anterior, aunque tendrás que utilizar el vector de tamaño fijo de antes.

De nada ;).

Mientras no pidas que te lo hagamos nosotros, estamos aquí encantados.

EtherMaN

ok entonces veo que lo de ponerle lo de struct datos[25][3] es lo correcto, ya que necesito como una especie de bdd.

respecto a lo del tamaño del char, sino me ekivoco lo puedo modificar mediante un puntero y la gestión dinámica, corríjeme si me equivoco.

Y lo ultimo mirare la función fwrite y fscan pero cuando tenga el algoritmo acabado ;).

Gracias, voy a trastear un rato. Una cosa que me intriga es lo del 'typedef' :S

PD. Prefiero hacerlo yo, no tengo tanta cara como algunos..

Un saludo

maRc

Con un char * puedes tener la cadena de tamaño variable, el problema es que si quieres guardar luego la estructura en un fichero, lo vas a tener un poco más dificil.

Te explico.

El char * apunta a una posición de memoria, que no sabes donde está, entonces cuando vayas a guardar la estructura, se guarda simplemente esa dirección, no lo que tiene.

En cambio, si lo haces un char[10], los 10 carácteres se guardan dentro de la propia estructura. Por lo tanto, cuando la guardas, se guardan también los 10 caracteres.

EtherMaN

tengo una duda grave.. :

struct datos{
char dni[10];
...
} inquilinos[25][3];

Estoy usando una estructura parecida a esta. El problema es que estoy intentando inicializar el char dni para saber si he escrito algo ahí o no. No encuentro la forma de saberlo, ¿ sabéis si puedo inicializarlo a 0 o algo similar ?

LOc0

Inicializa a 0 el elemento [0] de la cadena. Luego compruebas la longitud de la cadena con strlen(dni) y si es cero es que no has escrito nada.


dni[0]=0;

Salu2 ;)

maRc

Dentro de la estructura no puedes inicializarlo.

Haz una función que lo haga y la ejecutas al iniciar el programa.

EtherMaN

entonces veo que tengo que iniciarlo al menos la primera vez que ejecute el programa, ya que después usare los ficheros y no me interesa.

haré algo como SI NO EXISTE ARCHIVO.txt INICIALIZAR y luego crear el archivo.txt. Me parece que es la forma mas sencilla que se me ha ocurrido y ademas se hacerla ;p.

Un saludo ;P

Ya no se que hacer con el tema de ficheros. He conseguido crear el fichero y guardar la informacion de un vector pero al volver introducir otro, el anterior es machacado por el siguiente y no se como hacerlo de forma ordenada 1 linea por registro o algo asi.

¿ Alguna idea ?

L

Cambia las propiedades de lectura/escritura.

Debes estar trabajando con un fopen en "w". Ponlo a "a" (si no recuerdo mal... que lo digo de memoria).

EDIT:

http://www.conclase.net/c/librerias/funcion.php?fun=fopen

;)

Usuarios habituales

  • Lightworker
  • EtherMaN
  • maRc
  • LOc0