C/Visual C - AYUDA EN C (archivos)

 
Vista:

AYUDA EN C (archivos)

Publicado por mar (5 intervenciones) el 11/08/2005 02:47:38

Definir un tipo de datos que represente a una persona, siendo sus campos: el nombre (char *), el apellido (char *), cédula (char [10]) y la edad (int). Llamar PERSONA a este tipo de datos.

Escribir un programa que lea el contenido de un archivo de texto en el que cada línea contenga los datos que definen a una persona (de acuerdo al tipo de datos mencionado anteriormente), y rellene de esa forma una arreglo de variables de tipo PERSONA. El programa debe recibir el nombre del archivo a leer como argumento, teniendo que introducirse éste en la misma línea que ejecuta el programa. Para ello la función main debe tener el prototipo estándar int main(int argc, char *argv[]). El programa debe comprobar que el número de líneas que se van leyendo no supera la dimensión del arreglo definido (Máximo 200). Una vez terminado de leer el archivo debe imprimirse a pantalla los datos de todas las personas (una por línea), y liberarse toda la memoria que se haya ocupado dinámicamente.

UTILIZAR las funciones:

• malloc y free: para alocar y liberar memoria.

HE HECHO UN POCO PERO NO ME CORRE Y ME DIERON TIEMPO PARA ENTREGARLO EL SABADO PODEIS AYUDARME ES QUE ESTOY APRENDIENDO EN C Y NO PUEDO TERMINARLO ALGO ESTA MAL EN EL CODIGO Y NO SE QUE ES? GRACIAS POR SU AYUDA




#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define N 200

struct PERSONA //
{
char nombre[];//
char apellido[];//
char cedula[10];
char edad;
}datos;

main(char *argv[])

{
struct PERSONA n[N];
int i;
clrscr();
printf("Introduzca el nombre del archivo a leer: ");
scanf("%s",argv[1]);
FILE *archivo;

if ((archivo= fopen(argv[1], "r")) == NULL)
{
printf("PROBLEMAS AL ABRIR EL ARCHIVO\n");
exit(1);
}
else
{
i=0;
while(!feof(archivo))
{
fread(&datos, sizeof(struct PERSONA),1,archivo);
n[i]=datos;
i++;
}
}

for(i=0;i<20;i++)
{
printf("%6s",n[i]);
printf("\n");
}
fclose(archivo)
getch();
return 0;
}

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AYUDA EN C (archivos)

Publicado por fernando.gomez (1603 intervenciones) el 11/08/2005 16:23:01
Epa:

struct PERSONA //
{
char nombre[];//
char apellido[];//
char cedula[10];
char edad;
}datos;

esto es incorrecto, no especificas el tamaño del array de caracteres para nombre ni apellido. Por ejemplo:

struct PERSONA //
{
char nombre[20];//
char apellido[20];//
char cedula[10];
char edad;
} datos;

O bien, debes inicializarla directamente a un array de caracteres, pero la longitud de la cadena será el número de letras de la cadena de asignación más el caracter nulo:

struct PERSONA //
{
char nombre[] = "Fernando";
char apellido[] = "Gomez";
char cedula[10];
char edad;
}datos;

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA EN C (archivos)

Publicado por mar (5 intervenciones) el 12/08/2005 04:41:50
es que para eso debo de usar el malloc para que capture el tamaño del registro, ademas lo que necesito es capturar los datos al array, el archivo contiene los datos de la estructura
yo tengo que leerlos y capturarlos en el array luego imprimirlos!! me explico?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA EN C (archivos)

Publicado por fernando.gomez (1603 intervenciones) el 12/08/2005 06:47:44
Pues no capizco bien. En todo caso, esa estructura tiene una sintaxis incorrecta. ¿Podrías explicarme --esta vez con manzanas-- tu problema? Evidentemente hay que cambiar esa estructura, pero no capizco bien lo que quieres hacer.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA EN C (archivos)

Publicado por mar (5 intervenciones) el 13/08/2005 04:58:53
OK VOY DE NUEVO

TENGO EL ARCHIVO CON DATOS ALMACENADOS DE DICHA ESTRUCTURA Y NO IMPÓRTA SUPONGAMOS QUE TENGO LOS ESPACIOS DEL NOMBRE[30]... ETC. AHORA ESOS DATOS LOS TENGO QUE CAPTURAR EN UN ARRAY DE DIMENCION 200 PARA ELLO HAGO LO SIGUIENTE STRUCT PERSONA ARREGLO[200] OK?
AHORA LOS DATOS DEL ARCHIVO TENGO QUE CAPTURARLOS EN EL ARREGLO

SI LO HAGO ASI:

I=0;
STRUCT PERSONA DATOS;
STRUCT PERSONA ARREGLO[200];
while(!feof(archivo)){

fread(&DATOS, sizeof(struct PERSONA),1,archivo);
//ahora lo pense usar de esta forma
fread(&n[i], sizeof(struct PERSONA),1,archivo);//me parecio mas logico y menos complicado
n[I]=DATOS;

I++;
}

LO QUE NO SE ES SI ESTO ESTA BIEN YA QUE NO ME CAPTURA LOD DATOS O SI HAY OTRA FORMA DE HACERLO MAS SENCILLA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA EN C (archivos)

Publicado por VoidPointer (180 intervenciones) el 14/08/2005 19:43:04
tu problema a grandes rasgos es que queres leer una struct la de la cual no tenes ni la mas minima idea de que tamaño tiene ,vos no sabes si el primer struct que se escribio tenia 10 bytes 80 bytes o lo que sea,ya que sus campos se definen en tiempo de ejecucion por medio de malloc y por tanto varian.
si fuera un struct de tamaño definido ya sabes cuanto leer, ahora tendras que ingeniartelas para saber cuantos bytes leer.
creo qeu es uno de los errores , ya ves como es esto de la programacion.

Saludos :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar