elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ficheros y estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ficheros y estructuras  (Leído 2,022 veces)
Cas980

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Ficheros y estructuras
« en: 18 Abril 2014, 23:29 pm »

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
Código:
#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:

Citar

   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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ficheros y estructuras
« Respuesta #1 en: 19 Abril 2014, 13:58 pm »

Antes del "system("pause");" del final, tienes un "break;". Qué hace ese break?


En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: Ficheros y estructuras
« Respuesta #2 en: 19 Abril 2014, 16:27 pm »

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:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. struct{
  7.    char id[30];
  8.    char titulo[30];
  9.    char autor[30];
  10.    char editorial[30];
  11.    int paginas;
  12. }libros;
  13. /******************funcion de busqueda************/
  14. void busqueda(){
  15. FILE *datalib;
  16. int op2;
  17. char temp[60];
  18. bool salir=false;
  19.   do{
  20.   system("cls");
  21. printf("\n Escoja la opcion: ");
  22.   printf("\n 1 - Busqueda por ID: ");
  23. printf("\n 2 - Busqueda por titulo: ");
  24.   printf("\n 0 - Salir: ");
  25. scanf("\n%d",&op2);
  26.   switch(op2){
  27.     case 1: {
  28.     system("cls");
  29.     if((datalib=fopen("C:\\libros.csv","r"))==NULL)
  30.     {
  31.       printf("Error al abrir el archivo!!\n");
  32.         system("pause");
  33.               }//if de comprobacion
  34.         else{
  35.         printf("Introduzca el ID del libro: ");scanf("%[^\n]",temp);
  36.            while(fread(&libros,sizeof(libros),1,datalib)==1) {
  37.                 if(strcmp(libros.id,temp)==0)
  38.                 {
  39.                 printf("\nID %s",libros.id);
  40.                 printf("\nTitulo %s",libros.titulo);
  41.                 printf("\nAutor %s",libros.autor);
  42.                 printf("\nEditorial %s",libros.editorial);
  43.                 printf("\nPaginas %d",&libros.paginas);
  44.                 }//del if comparador
  45.                 else{
  46.                 printf("\nRegistro No encontrado\n");
  47.                 system("pause");
  48.                 }//else de no encontrado
  49.            }//del while
  50.         } //del else
  51.      fclose(datalib);
  52.     }//del case 1
  53.     break;
  54.     case 2:{
  55. system("cls");
  56.     if((datalib=fopen("C:\\libros.csv","r"))==NULL)
  57.            {
  58.            printf("Error al abrir el archivo!!\n");
  59.            system("pause");
  60.            }//del if de comprobacion
  61.            else{
  62.                printf("Introduzca el titulo: ");scanf("%[^\n]",temp);
  63.                while(fread(&libros,sizeof(libros),1,datalib)==1){
  64.                    if(strcmp(libros.titulo,temp)==0){
  65.                 printf("\nID %s",libros.id);
  66.                 printf("\nTitulo %s",libros.titulo);
  67.                 printf("\nAutor %s",libros.autor);
  68.                 printf("\nEditorial %s",libros.editorial);
  69.                 printf("\nPaginas %d",&libros.paginas);
  70.                    }//del if de encontrado
  71.                    else{
  72.                    printf("\nRegistro No encontrado\n");
  73.                 system("pause");
  74.                    }//del else de no encontrado
  75.                }//del while
  76.            }//del else
  77.            fclose(datalib);
  78.     }//del case 2
  79.     break;
  80.     case 0: salir=true;
  81.     break;
  82.   }
  83.   }while(salir!=true);
  84.  
  85. }
  86. /***************procedimiento principal***********************/
  87. int main()
  88. { //del main
  89. int op,op2,i,j, cont=0,cant,salir=false;
  90. char temp[60];
  91. char temp2[60],elim[60];
  92. char *bus,*eli, *mos;
  93. FILE *datalib;
  94.         do{
  95.           system("cls");
  96.         printf("\n Escoja su opcion: ");
  97.         printf("\n 1 - Busqueda de registro de libro ");
  98.         printf("\n 2 - Agregar nuevo registro de libro ");
  99.         printf("\n 3 - Quitar registro de libro ");
  100.         printf("\n 4 - Modificar registro de libro ");
  101.         printf("\n 5 - Imprimir todos los registros ");
  102.         printf("\n 0 - Salir");
  103.         scanf("\n%d",&op);
  104.  
  105.        switch(op)
  106. { //del switch
  107.            case 1:
  108.               busqueda();//llama a la funcion de busqueda
  109.               break;
  110.            case 2:
  111.             system("cls");
  112.             printf("en construccion");
  113.               system("pause");
  114.               break;
  115.            case 3:
  116.             system("cls");
  117.               printf("en construccion");
  118.               system("pause");
  119.               break;
  120.            case 4:
  121.             system("cls");
  122.             printf("en construccion");
  123.               system("pause");
  124.               break;
  125.            case 5:
  126.             system("cls");
  127.            printf("en construccion");
  128.            system("pause");
  129.               break;
  130.            case 0: salir=true;
  131.            break;
  132.            }
  133.            }while(salir!=true);
  134.      }//del main
  135.  
para guardar, ingresar tus datos a la estructura y despues

Código
  1. FILE *datalib=fopen("C:\\libros.csv","a+");
  2. fwrite(&libros,sizeof(libros),1,datalib);
En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: Ficheros y estructuras
« Respuesta #3 en: 19 Abril 2014, 19:46 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructuras.....
Programación C/C++
Rodri 1 2,503 Último mensaje 6 Octubre 2011, 19:46 pm
por satu
¿que diferencia ahi entre ficheros binarios y ficheros binarios con estructura?
Windows
Anonymous250 0 2,005 Último mensaje 10 Noviembre 2011, 13:37 pm
por Anonymous250
iDStore lista ficheros y directorios ocultos de ficheros .DS_Store
Nivel Web
MichBukana 0 3,261 Último mensaje 29 Agosto 2013, 09:21 am
por MichBukana
guardar estructuras en ficheros
Programación C/C++
pedroedlp 6 3,548 Último mensaje 23 Abril 2014, 19:24 pm
por pedroedlp
estructuras en ficheros
Programación C/C++
pedroedlp 4 1,823 Último mensaje 23 Abril 2014, 10:09 am
por amchacon
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines