zetsubou_akatsuki Posted April 26, 2011 Report Share Posted April 26, 2011 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now