Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Vaciar variables de una estructura

Estas en el tema de Vaciar variables de una estructura en el foro de C/C++ en Foros del Web. Hola, tengo una duda. Para borrar los datos de una variable de estructura, utilizo memset() , que me permite eliminar variable por variable de la ...
  #1 (permalink)  
Antiguo 19/05/2010, 10:16
 
Fecha de Ingreso: marzo-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Vaciar variables de una estructura

Hola, tengo una duda.
Para borrar los datos de una variable de estructura, utilizo memset(), que me permite eliminar variable por variable de la estructura (tal como he puesto en mi ejemplo).
1) ¿existe alguna forma de limpiar los valores de una sola orden para toda la estructura?
2) ¿Cual es la mejor forma que tengo de que el programa siguiente me grabe los datos que le doy, en el fichero, sin meter valores que quedaban en la memoria de procesos anteriores?, es decir, que deje lo que esta en blanco, con espacios (sin usar memset()).

Código HTML:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio2.h>
  4. #include <string.h>
  5.  
  6. struct coche
  7.   {
  8.     char matricula [8];
  9.     char propietario[25];
  10.     char marca[10];
  11.     char modelo[10];
  12.     char color[10];
  13.  };
  14.  
  15. void mete(struct coche *datos)
  16.   {
  17.     do
  18.       {
  19.         clrscr();
  20.         memset(((*datos).matricula),0,sizeof(((*datos).matricula)));
  21.         memset(((*datos).propietario),0,sizeof(((*datos).propietario)));
  22.         memset(((*datos).marca),0,sizeof(((*datos).marca)));
  23.         memset(((*datos).modelo),0,sizeof(((*datos).modelo)));
  24.         memset(((*datos).color),0,sizeof(((*datos).color)));
  25.         printf("Matricula: ");
  26.         gets(((*datos).matricula));
  27.         printf("Propietario: ");
  28.         gets((*datos).propietario);
  29.         printf("Marca: ");
  30.         gets((*datos).marca);
  31.         printf("Modelo: ");
  32.         gets((*datos).modelo);
  33.         printf("Color: ");
  34.         gets((*datos).color);
  35.         printf("Todo correcto?[s/n] ");
  36.       }
  37.     while (getch()!='s');
  38.   }
  39.  
  40. main()
  41.   {
  42.     struct coche datos;
  43.     FILE * files;
  44.     files=fopen("coche.txt", "w");
  45.     fwrite("Matri.  Propietario.             Marca.    Modelo.   Color.\n", 60, 1, files);
  46.     do
  47.       {
  48.         mete (&datos);
  49.         fwrite(&datos, sizeof(datos), 1, files);
  50.         fwrite("\n", 1, 1, files);
  51.         printf("\nOtro?[s/n]");
  52.       }
  53.     while (getch()!='n');
  54.   }

Aqui destaco mi parte problematica.
Código HTML:
Ver original
  1. memset(((*datos).matricula),0,sizeof(((*datos).matricula)));
  2. memset(((*datos).propietario),0,sizeof(((*datos).propietario)));
  3. memset(((*datos).marca),0,sizeof(((*datos).marca)));
  4. memset(((*datos).modelo),0,sizeof(((*datos).modelo)));
  5. memset(((*datos).color),0,sizeof(((*datos).color)));

Gracias por adelantado

Última edición por grisuco; 19/05/2010 a las 10:21
  #2 (permalink)  
Antiguo 19/05/2010, 10:46
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Vaciar variables de una estructura

ok te tengo una con memset, utilizandola en una sola instruccion, donde datos. es un puntero, es util siempre y cuando las propiedades de la estructura no sean punteros.

memset(datos, 0, sizeof(coche));

bien para tu segunda preguta, puede utilizar las funciones fwrite, fread, fseek. para realizar lectura y escritura de un archivo, tambien puede utilizar fprintf y fscanf.

puedes guardar los datos de manera binaria, con
  #3 (permalink)  
Antiguo 19/05/2010, 13:11
 
Fecha de Ingreso: marzo-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Vaciar variables de una estructura

Gracias, por las respuestas, me han servido las dos.

Etiquetas: estructura, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:40.