|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Amphoth3ra
Páginas: [1]
1
« en: Domingo 12 de Junio de 2011, 13:46 »
Funcionó perfecto men, era justo lo que necesitaba, muchas gracias =)
Saludos!
2
« en: Sábado 11 de Junio de 2011, 13:52 »
De esto deduzco que el fgets no me servirá si lo que quiero es poner todos los datos de la estructura en una sola línea, ya que para los campos 1 y 2 me toma el fin de la línea.
Me explico, lo que yo quiero es que los datos de la estructura se puedan imprimir así: Batman Acción 1 126
Pero en realidad ahora se imprimen así: Batman Acción 1 126
¿Existe otra manera de que yo pueda guardar el string sin el salto de línea?
Saludos!
3
« en: Jueves 9 de Junio de 2011, 01:13 »
Estoy practicando un poco de fgets con cadenas y me he encontrado con algo bastante extraño, que consiste en que las cadenas que yo entrego de entrada, me salen correctas, pero me salen con una línea de más. Les explico con código en mano. Esta aplicación pretende guardar en una estructura temporal cuatro datos 1) El nombre de un DVD 2) El género de un DVD 3) El número de discos de un DVD 4) La duración total del DVD en minutos #include<stdio.h> #include<stdlib.h> #include<string.h> struct dvd { char name[255]; char genero[50]; int discs_number; int length; }; int main() { struct dvd temporal; char discs_number[2]; char length[4]; fgets(temporal. name, 255, stdin ); fgets(temporal. genero, 50, stdin ); printf("%sn", temporal. genero); printf("Número de discos del DVDn"); fgets(discs_number , 2, stdin ); temporal. discs_number = atoi(discs_number ); printf("%dn", temporal. discs_number); temporal. length = atoi(length ); printf("%dn", temporal. length); return(0); }
Cuando ejecuto el programa, si introducen el nombre del DVD, la cadena que se me regresa es correcta cuando yo haga el printf, pero automáticamente se me salta una línea. Lo mismo pasa con el género del DVD. Los campos de número de discos y de duración del DVD funcionan correctamente. Pruébenlo con estos datos: Nombre: Batman Género: Acción Número de discos: 1 Duración; 126 ¿Que puede estar pasando? (por cierto, mi código está compilado con GCC) Saludos!
4
« en: Sábado 14 de Mayo de 2011, 15:38 »
Bueno, en el programa final usé scanf y no fgets, aunque igual me funcionaba, lo tomaré en cuenta para después. El feof funcionó tal cual como me dijeron, el dato no se guardaba duplicado.
Saludos.
5
« en: Lunes 9 de Mayo de 2011, 01:15 »
De ahí te cuento como me salió, no te puedo decir mucho, pero solucioné los dos problemas que tenía.
Saludos.
6
« en: Domingo 8 de Mayo de 2011, 23:58 »
El problema del 4 que aparece es porque no lees bien las cadenas.
Una cadena en C se representa como un conjunto de caracteres terminado con el caracter .
Tú al leer de la forma que lo haces ( scanf("%*c%[^n]",data_save.rut) no le estás poniendo el al final y por eso al imprimir con %s te da problemas porque no sabe donde finaliza la cadena.
Para leer cadenas se utiliza %s también. ¿Explícitamente que es lo que tengo que modificar? (si agrego me tira un aviso diciendo que el dice que está incrustado en el código). Saludos.
7
« en: Domingo 8 de Mayo de 2011, 21:11 »
Los problemas que yo tengo se relaciona con estructuras y con el guardado de estas estructuras y archivos binarios. Les explico el concepto: Lo que estoy buscando es almacenar una serie de parámetros a una estructura (rut, edad y nombre) y luego esta estructura se pasa a un archivo binario, el cual luego yo debo leerlo por atributo (sea rut, nombre o edad). A mí me ocurren dos problemas con el programa que estoy haciendo. En primera instancia, el rut que yo introduzco inicialmente se introduce bien, pero cuando yo lo rescato del archivo binario la parte del rut me aparece con un caracter más del que yo puse originalmente, vale decir que si yo introduzco esta información: Rut Edad Nombre -------------------------------------------------------------------- 12.346.812-7 52 Stephen Berger Del archivo se me regresa lo siguiente: Rut Edad Nombre -------------------------------------------------------------------- 12.346.812-74 52 Stephen Berger Lo otro extraño que me pasa es que la última estructura que pongo se me duplica al rescatar la información del archivo binario, vale decir, si yo pongo esta información: Rut Edad Nombre -------------------------------------------------------------------- 12.222.618-7 54 Jorge Contreras 12.228.164-4 59 Gerónimo Vallejos 13.433.618-K 47 Claudia CotaposDel archivo se me regresa esto: Rut Edad Nombre -------------------------------------------------------------------- 12.222.618-76 54 Jorge Contreras 12.228.164-4; 59 Gerónimo Vallejos 13.433.618-K/ 47 Claudia Cotapos 13.433.618-K/ 47 Claudia Cotapos Nótese que en lo anterior también se me repite el problema del rut, ustedes pueden ver que me sale un caracter adicional al rut. Este es el código del programa: #include <stdio.h> #include <stdlib.h> #include <string.h> struct persona { char rut[12]; int edad; char nombre[255]; }; // Declaración de tabla y creación del archivo con el que se vá a trabajar void create_table_personas() { FILE *principal_file, *test_file; principal_file = fopen ("archivo.dat", "wb"); if (principal_file==NULL) printf ("No se pudo crear el archivon"); test_file = fopen ("archivo.dat", "rb"); if (test_file==NULL) printf ("No se pudo abrir el archivon"); } // Inserción en la tabla void insert_into_table() { int menu2_on = 1; struct persona avance; FILE *save_file; save_file = fopen ("archivo.dat", "r+wb"); fread (&avance , sizeof(struct persona ), 1, save_file ); if (avance.edad == 0) do { do { fread (&avance , sizeof(struct persona ), 1, save_file ); } while (!feof(save_file )); struct persona data_save; scanf("%*c%[^n]",data_save. rut); printf("Edad de la personan"); scanf("%d", &data_save. edad); printf("Nombre de la personan"); scanf("%*c%[^n]",data_save. nombre); fwrite (&data_save , 1 , sizeof(struct persona ) , save_file ); printf("¿Desea agregar otra tupla? (1 Si, 0 No)n"); } while (menu2_on == 1); struct persona junior; FILE *test_file; test_file = fopen ("archivo.dat", "rb"); if (test_file==NULL) printf ("No se pudo abrir el archivon"); printf("--------------------------------------------------------------------n"); { fread (&junior , sizeof(struct persona ), 1, test_file ); printf("%s %d %sn", junior. rut, junior. edad, junior. nombre); } } // Función: Consulta por edad // void attribute_age() { FILE *checker; struct persona temporal; int edad_consulta; printf("Inserte la edad a consultarn"); scanf("%d",&edad_consulta ); checker = fopen ("archivo.dat", "rb"); if (checker==NULL) printf ("No se pudo abrir el archivon"); printf("--------------------------------------------------------------------n"); do { fread (&temporal , sizeof(struct persona ), 1, checker ); if (edad_consulta == temporal.edad) { printf("%s %d %sn", temporal. rut, temporal. edad, temporal. nombre); } } while (!feof(checker )); } // Función: Consulta por nombre void attribute_name() { FILE *checker2; struct persona temporal2; char nombre_consulta[255]; printf("Inserte el nombre a consultarn"); scanf("%*c%[^n]",nombre_consulta ); checker2 = fopen ("archivo.dat", "rb"); if (checker2==NULL) printf ("No se pudo abrir el archivon"); printf("--------------------------------------------------------------------n"); do { fread (&temporal2 , sizeof(struct persona ), 1, checker2 ); if (nombre_consulta == temporal2.nombre) { printf("%s %d %sn", temporal2. rut, temporal2. edad, temporal2. nombre); } } while (!feof(checker2 )); } // Función: Consulta por rut void attribute_rut() { FILE *checker3; struct persona temporal3; char rut_consulta[12]; printf("Inserte el rut a consultarn"); scanf("%*c%[^n]",rut_consulta ); checker3 = fopen ("archivo.dat", "rb"); if (checker3==NULL) printf ("No se pudo abrir el archivon"); printf("--------------------------------------------------------------------n"); do { fread (&temporal3 , sizeof(struct persona ), 1, checker3 ); if (rut_consulta == temporal3.rut) { printf("%s %d %sn", temporal3. rut, temporal3. edad, temporal3. nombre); } } while (!feof(checker3 )); } // Función: Consulta completa void generate_full() { FILE *checker4; struct persona temporal4; checker4 = fopen ("archivo.dat", "rb"); if (checker4==NULL) printf ("No se pudo abrir el archivon"); printf("--------------------------------------------------------------------n"); do { fread (&temporal4 , sizeof(struct persona ), 1, checker4 ); printf("%s %d %sn", temporal4. rut, temporal4. edad, temporal4. nombre); } while (!feof(checker4 )); } // Menú secundario de búsqueda por atributo, void attribute_search() { int menu3_option; do { printf("1 Consulta por rutn"); printf("2 Consulta por nombren"); printf("3 Consulta por edadn"); printf("4 Generar listado completon"); scanf("%d", &menu3_option ); switch (menu3_option) { attribute_rut(); break; attribute_name(); break; attribute_age(); break; generate_full(); break; default: break; } } while ((menu3_option < 1) || (menu3_option > 4)); } // Opciones de menú int menu_option, menu_on = 1; // Menú principal int main () { do { do { scanf("%d", &menu_option ); switch (menu_option) { create_table_personas(); break; insert_into_table(); break; attribute_search(); break; break; } } while ((menu_option < 1) || (menu_option > 3)); printf("¿Desea realizar otra operacion? (1 Si, 0 No)n"); } while (menu_on == 1); return (0); }
Saludos.
Páginas: [1]
|
|
|