Autor
|
Tema: Ficheros y estructuras (Leído 2,263 veces)
|
Cas980
Desconectado
Mensajes: 6
|
Saludos a toda la comunidad, tengo algunas dudas espero puedan auxiliarme con algunas. Estoy trabajando en el siguiente codigo y me he topado con algunos problemas En la parte de buscar por titulo a la hora de ingresar el titulo el programa se cierra, el problema sera con el fgets()? intente usar el gets() pero me pasaba lo mismo #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std;
struct libros { char id[30]; char titulo[30]; char autor[30]; char editorial[30]; int paginas; }; libros registro [30];
int main() { int op,op2,i,j, cont=0,cant; char temp[60]; char temp2[60],elim[60]; char *bus,*eli, *mos; FILE *datalib;
printf("\n Escoja su opcion: "); printf("\n 1 - Busqueda de registo de libro "); printf("\n 2 - Agregar nuevo registro de libro "); printf("\n 3 - Quitar registro de libro "); printf("\n 4 - Modificar registro de libro "); printf("\n 5 - Imprimir todos los registros "); printf("\n 0 - Salir"); scanf("%d",&op);
switch(op) { case 0: exit(0); break; case 1: printf("\n Escoja la opcion: "); printf("\n 1 - Busqueda por ID: "); printf("\n 2 - Busqueda por titulo: "); printf("\n 0 - Salir: ");
scanf("%d",&op2);
datalib=fopen("libros.csv","r"); if(datalib==NULL){ printf("\n No se ha podido abrir el archivo"); exit(1);} switch (op2) { case 0: exit(0); case 1: printf("\n Introduzca el ID del libro deseado:"); scanf("%s",&temp); for(i=0;!feof(datalib);i++){ fgets(temp2,60,datalib); bus=strtok(temp2,","); if(strcmp(bus,temp)==0){ printf("\n Registro encontrado"); printf("\n Los datos son:"); printf("\n\n"); while(bus!=NULL){ printf("\n %s\n",bus); bus=strtok(NULL,",");} cont++;} } if(cont==0){ printf("\n ID no encontrada");} system("PAUSE");
break;
case 2: printf("\n Introduzca el titulo del libro deseado:"); fgets(temp,60,stdin); for(i=0;!feof(datalib);i++){ fgets(temp2,60,datalib); bus=strtok(temp2,","); bus=strtok(NULL,","); if(strcmp(bus,temp)==0){ printf("\n Registro encontrado"); printf("\n Los datos son:"); printf("\n\n");
while(bus!=NULL){ printf("\n %s\n",bus); bus=strtok(NULL,",");} cont++;} } if(cont==0){ printf("\n Titulo no encontrado");} system("PAUSE"); break;
default: printf("\nLa opcion no es correcta "); printf("\n\n"); system("PAUSE"); system("cls"); break; fclose(datalib); } break; system("PAUSE"); return 0; }
El fichero tiene lo siguiente: DR453,INGENIERIA INDUSTRIAL,PHILIP HICKS,PATRIA,450 RT567,TRASMISION DE DATOS Y REDES,FOROUZAN,MC GRAW HILL,920 TJ567,REDES DE COMPUTADORAS,ANDREW TANENBAUM,PEARSON,870
|
|
« Última modificación: 19 Abril 2014, 06:11 am por Cas980 »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Antes del "system("pause");" del final, tienes un "break;". Qué hace ese break?
|
|
|
En línea
|
|
|
|
d91
Desconectado
Mensajes: 165
|
para empezar ya no tienes que hacer un arreglo de la estructura libros, porque estas usando ficheros, tus menus no funcionan porque no estan dentro de ciclos, y lo mas importante no puedes hacer un fichero manualmente, escribir en el y despues tratar de leerlo con el formato de tu estructura, sino que guardar cada cosa en otra variable de lectura de archivo directo y enviarlo a tu estructura y ademas deberias de modularizar tus case para no perderte, Si quieres leer un fichero con el formato de tu estructura debes guardar datos con tu estructura, te reestructure el codigo solo para leer: #include <stdio.h> #include <string.h> #include <stdlib.h> struct{ char id[30]; char titulo[30]; char autor[30]; char editorial[30]; int paginas; }libros; /******************funcion de busqueda************/ void busqueda(){ FILE *datalib; int op2; char temp[60]; bool salir=false; do{ system("cls"); printf("\n Escoja la opcion: "); printf("\n 1 - Busqueda por ID: "); printf("\n 2 - Busqueda por titulo: "); printf("\n 0 - Salir: "); scanf("\n%d",&op2); switch(op2){ case 1: { system("cls"); if((datalib=fopen("C:\\libros.csv","r"))==NULL) { printf("Error al abrir el archivo!!\n"); system("pause"); }//if de comprobacion else{ printf("Introduzca el ID del libro: ");scanf("%[^\n]",temp); while(fread(&libros,sizeof(libros),1,datalib)==1) { if(strcmp(libros.id,temp)==0) { printf("\nID %s",libros.id); printf("\nTitulo %s",libros.titulo); printf("\nAutor %s",libros.autor); printf("\nEditorial %s",libros.editorial); printf("\nPaginas %d",&libros.paginas); }//del if comparador else{ printf("\nRegistro No encontrado\n"); system("pause"); }//else de no encontrado }//del while } //del else fclose(datalib); }//del case 1 break; case 2:{ system("cls"); if((datalib=fopen("C:\\libros.csv","r"))==NULL) { printf("Error al abrir el archivo!!\n"); system("pause"); }//del if de comprobacion else{ printf("Introduzca el titulo: ");scanf("%[^\n]",temp); while(fread(&libros,sizeof(libros),1,datalib)==1){ if(strcmp(libros.titulo,temp)==0){ printf("\nID %s",libros.id); printf("\nTitulo %s",libros.titulo); printf("\nAutor %s",libros.autor); printf("\nEditorial %s",libros.editorial); printf("\nPaginas %d",&libros.paginas); }//del if de encontrado else{ printf("\nRegistro No encontrado\n"); system("pause"); }//del else de no encontrado }//del while }//del else fclose(datalib); }//del case 2 break; case 0: salir=true; break; } }while(salir!=true); } /***************procedimiento principal***********************/ int main() { //del main int op,op2,i,j, cont=0,cant,salir=false; char temp[60]; char temp2[60],elim[60]; char *bus,*eli, *mos; FILE *datalib; do{ system("cls"); printf("\n Escoja su opcion: "); printf("\n 1 - Busqueda de registro de libro "); printf("\n 2 - Agregar nuevo registro de libro "); printf("\n 3 - Quitar registro de libro "); printf("\n 4 - Modificar registro de libro "); printf("\n 5 - Imprimir todos los registros "); printf("\n 0 - Salir"); scanf("\n%d",&op); switch(op) { //del switch case 1: busqueda();//llama a la funcion de busqueda break; case 2: system("cls"); printf("en construccion"); system("pause"); break; case 3: system("cls"); printf("en construccion"); system("pause"); break; case 4: system("cls"); printf("en construccion"); system("pause"); break; case 5: system("cls"); printf("en construccion"); system("pause"); break; case 0: salir=true; break; } }while(salir!=true); }//del main
para guardar, ingresar tus datos a la estructura y despues FILE *datalib=fopen("C:\\libros.csv","a+"); fwrite(&libros,sizeof(libros),1,datalib);
|
|
|
En línea
|
|
|
|
d91
Desconectado
Mensajes: 165
|
solo te reestructure el codigo pero no me habia dado cuenta que la extension .csv de tu fichero es una extension de excel, por lo tanto no creo te vaya a fucionar mejor usa un .txt o .dat que son texto plano, si quieres usar el .csv es harina de otro costal, es algo que esta fuera del alcance de lo basico de c, porque adentro de excel podemos habilitar la opcion programador donde podemos hacer conexiones por medio de las librerias, un caso muy usado es la conexion de un formulario de visual basic hacia access o hacia excel
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Estructuras.....
Programación C/C++
|
Rodri
|
1
|
2,759
|
6 Octubre 2011, 19:46 pm
por satu
|
|
|
¿que diferencia ahi entre ficheros binarios y ficheros binarios con estructura?
Windows
|
Anonymous250
|
0
|
2,256
|
10 Noviembre 2011, 13:37 pm
por Anonymous250
|
|
|
iDStore lista ficheros y directorios ocultos de ficheros .DS_Store
Nivel Web
|
MichBukana
|
0
|
3,580
|
29 Agosto 2013, 09:21 am
por MichBukana
|
|
|
guardar estructuras en ficheros
Programación C/C++
|
pedroedlp
|
6
|
3,844
|
23 Abril 2014, 19:24 pm
por pedroedlp
|
|
|
estructuras en ficheros
Programación C/C++
|
pedroedlp
|
4
|
2,088
|
23 Abril 2014, 10:09 am
por amchacon
|
|