Jump to content

pasar de un fichero a un arreglo


Recommended Posts

hola gente tengo una duda con respecto a pasar los datos dentro de un fichero a un arreglo aki les pongo el codigo

 

# include <stdio.h>

# include <conio2.h>

# include <stdlib.h>

# include <string.h>

 

void ingresar(int *contador);

void listar();

void consultarautor();

void precio();

 

struct pintura{

char autor[20];

char nombre[20];

 

long codigo;

char tipo[15];

int seguro;

};

struct pintura p;

 

main(){

 

 

char a[20];

int nombre;

int op;

int contador=0;

 

do{

 

 

clrscr();

printf("\n");

printf("\t _____________________________\n");

printf("\t| _________________________ |\n");

printf("\t| | MENU PRINCIPAL | |\n");

printf("\t| |------------------------- | |\n");

printf("\t| | | |\n");

printf("\t| | 1) Ingresar Dato. | |\n");

printf("\t| | 2) listar. | |\n");

printf("\t| | 3) Precio. | |\n");

printf("\t| | 4) Buscar Autor. | |\n");

printf("\t| | 5) Arreglo. | |\n");

printf("\t| | 6) Salir. | |\n");

printf("\t| | | |\n");

printf("\t| | | |\n");

printf("\t| | | |\n");

printf("\t| | | |\n");

printf("\t| |_________________________| |\n");

printf("\t|_____________________________|\n");

printf("\n\tIngrese su opcion: ");

scanf("%d",&op);

 

 

 

switch (op){

 

case 1:clrscr();

 

 

//variable contador la enviamos a nuestro procedimiento ingresar//

//esto contador tiene k ser <100 seba kl//

if (contador<2){

contador++;

 

getche();

ingresar(&contador);

 

}

 

 

if(contador>=2){

printf("no se pueden ingresar mas datos\n");

getche();

}

break;

 

case 2:clrscr();

listar();

getche();

break;

 

 

case 3:clrscr();

precio();

getche();

break;

 

case 4:clrscr();

consultarautor();

getche();

break;

}

 

 

}while(op!=5);

}

 

void ingresar(int *contador){

 

 

clrscr();

 

char opc;

int cont;

int con=0;

 

FILE *pi;

// y asi magicamente no podemos ingresar mas de 2 datos //

con=*contador;

 

do{

//este con tambien tiene k ser>=100//

 

if (con>=2){

 

printf("Volviendo al menu principal\n");

return;

getche();

}

if (cont=0){

 

pi=fopen("pinturas.txt","w");

}

 

if (cont=1){

 

pi=fopen("pinturas.txt","a");

}

 

 

printf("Ingrese autor :");

fflush(stdin);

fgets(p.autor,20,stdin);

 

 

 

 

 

 

clrscr();

printf("Ingrese nombre de pintura :");

fflush(stdin);

fgets(p.nombre,20,stdin);

clrscr();

 

printf("Ingrese codigo de pintura :");

fflush(stdin);

scanf("%d",&p.codigo);

clrscr();

 

 

printf("Ingrese tipo de pintura:");

 

fflush(stdin);

 

fgets(p.tipo,15,stdin);

 

 

 

fflush(stdin);

clrscr();

printf("Ingrese monto seguro:");

 

fflush(stdin);

 

scanf("%d",&p.seguro);

fflush(stdin);

 

 

clrscr();

 

 

fwrite(&p, sizeof( struct pintura),1,pi);

 

printf("Desea continuar s/n\n");

fflush(stdin);

scanf("%c",&opc);

clrscr();

fclose(pi);

cont=1;

con++;

*contador+=1;

 

 

//sumamos uno a nuestro contador//

}while(opc!='n');

 

 

clrscr();

 

 

 

 

}

 

void listar(){

 

 

 

FILE *pi;

if ((pi=fopen("pinturas.txt","r"))==NULL){

printf("No existen datos");

getch();

return ;

}

pi=fopen("pinturas.txt","r");

fread(&p, sizeof(struct pintura),1,pi);

 

 

while (!feof(pi)){

printf("\n");

printf("\t-----------------------------------------\n");

printf("\tNombre del autor : %s",p.autor);

printf("\tNombre de la pintura : %s",p.nombre);

printf("\tTipo de pintura : %s",p.tipo);

printf("\tMonto del Seguro : %1.f",p.seguro);

printf("\n\tCodigo pintura : %d",p.codigo);

printf("\n");

printf("\t-----------------------------------------\n");

printf("\n");

 

fread(&p, sizeof(struct pintura),1,pi);

}

printf("\n");

printf("Presione una tecla para volver...");

fclose(pi);

 

 

 

}

 

 

void consultarautor(){

 

 

char a[20];

char nombre;

 

fflush(stdin);

printf("\n\nIngrese el nombre del autor: ");

fgets(a,20,stdin);

 

FILE* pi;

 

if ((pi=fopen("pinturas.txt","r"))==NULL){

printf("No existen datos");

getch();

return ;

}

pi=fopen("pinturas.txt","r");

 

fread(&p, sizeof(struct pintura),1,pi);

while(!feof(pi)){

 

if(strcmp(a, p.autor)==0){

 

printf("\n");

printf("\t-----------------------------------------\n");

printf("\tNombre del autor : %s",p.autor);

printf("\tNombre de la pintura : %s",p.nombre);

printf("\tTipo de pintura : %s",p.tipo);

printf("\tMonto del Seguro : %1.f",p.seguro);

printf("\n\tCodigo pintura : %d",p.codigo);

printf("\n");

printf("\t-----------------------------------------\n");

printf("\n");

 

}

 

 

fread(&p, sizeof(struct pintura),1,pi);

 

 

}

fclose(pi);

 

 

}

 

 

void precio(){

 

char ti[20];

float porcentaje,valor,final;

 

fflush(stdin);

printf("Ingrese el tipo de pintura: ");

fgets(ti,20,stdin);

printf("Ingrese porcentaje para este tipo: ");

scanf("%f",&porcentaje);

 

FILE* pi;

 

if ((pi=fopen("pinturas.txt","r"))==NULL){

printf("No existen datos");

getch();

return ;

}

pi=fopen("pinturas.txt","r");

 

fread(&p, sizeof(struct pintura),1,pi);

while(!feof(pi)){

 

if(strcmp(ti, p.tipo)==0){

valor=p.seguro*porcentaje/100;

final=p.seguro+valor;

clrscr();

printf("\n");

printf("\t-----------------------------------------\n");

printf("\tNombre del autor : %s",p.autor);

printf("\tNombre de la pintura : %s",p.nombre);

printf("\tTipo de pintura : %s",p.tipo);

printf("\n\tMonto del Seguro : %1.f",p.seguro);

printf("\n\tValor FINAL : %1.f",final);

printf("\n");

printf("\t-----------------------------------------\n");

printf("\n");

 

}

fread(&p, sizeof(struct pintura),1,pi);

}

fclose(pi);

system("pause");

 

 

}

 

 

ahora bien , al precionar la opcionn 5 del menu principal, los datos que fueron almacenados anteriormente en archivo.txt deber ser leidos y copiados a un arreglo unidimencional

 

por ejemplo: en el ejercicio anterior , el struct pintura tiene atributos como

p.nombre

p.tipo

p.seguro

 

ect

 

quiero que el primer struct que esta en el archivo se guarda en la primera posicion de arreglo, pero no se como e probado varias formas, y no funka ni una, me gustaria saber si existe una funcion especifica que me permita tomar los datos de ficheroy copiarlos a array

 

 

gracias de ante mano

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...