Puedes intentar usar un archivo binario para empezar, asi la lectura del archivo sea correcta, en la manera en que lo hace tan solo lees 100 caracteres y los pones en cada uno de los campos, asi podrías usar fread();
pero si solo has creado un struct como es que lo usas como si fuera un array de struct? me explico: creas project pos, que es una estructurapero luego haces esto pos[count].nombre y eso es un array de estructuras project y no las has creado.
perdona, es que no veo donde has creado el array de struct
Nombre:hola Descripcion:Esto es una prueba Ubicacion:proyectos/hola --------------------------------------------------------------- Nombre:hola Descripcion:nuevamente es una prueba Ubicacion:proyectos/hola --------------------------------------------------------------- Nombre:Blax Descripcion:An interesting software Ubicacion:proyectos/blax --------------------------------------------------------------- Nombre:Blax Descripcion:an interesting software Ubicacion:proyectos/blax --------------------------------------------------------------- Nombre:Hola Descripcion:trabajando con linux Ubicacion:proyectos/hola --------------------------------------------------------------- Nombre:Gprom Descripcion:GNU Project manager. Ubicacion:/proyectos/gprom --------------------------------------------------------------- Nombre:Ktechlab Descripcion:Kde electronic suite Ubicacion:proyectos/ketchlab --------------------------------------------------------------- --------------------------------------------------------------- Cantidad de registros= 7Presione una tecla para continuar...
#include <stdio.h>#include <stdlib.h>#include <string.h>#define null 0#define max 80#define max1 100char c;//Para manejar errores...//hacemos una estructura global (typedef) para los proyectos (proyectos.db)typedef struct { char nombre[max]; char desc[max]; char loc[max];}project;project pos[max1];/********************************************Definicion de funciones para el programa ********************************************/void main_menu();void new_project();void edit();int listing();project read_structure();int select();/******************************************/project read_structure(){//Puntero al archivo...char line[100];FILE *id;int i=-1;int count=-1; id=fopen("proyectos.db","r"); while (!feof(id)){ fgets(line,max1,id); i++; count++; switch (i) { case 1:{strcpy(pos[count].nombre,line);break;} case 2:{strcpy(pos[count].desc,line);break;} case 3:{strcpy(pos[count].loc,line);break;} default:{/*Leera el delimitador, por lo tanto debemos agregar un proyecto nuevo.*/ count++; i=-1;break; } } } return (pos[count]);}/*****************************************************************************************/int select(){ int location=0,i=0; int position; position=listing(); printf("\t\tSeleccionar proyecto\n\t\t--------------------------\n"); printf("Estos son los proyectos."); for (i=0;i<position;i++){ printf("\tProyecto Nº %d\n\t------------------\n",i); printf("%s\n",pos.nombre); printf("%s\n",pos.desc); printf("%s\n",pos.loc);//Ahora el programa debe leer un delimitador. Para ello usamos printf printf("-----------------------------------------------\n\n"); }//for printf("Con cual de ellos desea trabajar?\n->"); scanf("%d",&location); printf("Estara trabajando con el proyecto %d",location); printf("\nPresione una tecla para continuar."); getchar(); return location;}int listing(){/******************************************************************************************LISTING()--------- Procedimiento que imprime por pantalla los datos del archivo de proyectos. Si no encuentrael archivo, envia una señal de error*******************************************************************************************/char line[100];//Puntero al archivo...FILE *id;int count=0;int countreg=0; id=fopen("proyectos.db","r");//Chequeamos si el archivo existe...Es extraño. En windows funciona bien. Aqui se ve feo. if (id==null) { system("cls"); printf("Error 404. Archivo no encontrado.\n\a\nAgregar entradas primero.\nPresione una tecla para continuar"); c=getchar(); main_menu(); }//Leemos el archivo hasta el final de su contenido. system("cls"); while (!feof(id)){ fgets(line,100, id); count++; printf("%s\n ",line); if (count==4){ count=0; countreg++; } } fclose(id); printf("Cantidad de registros= %d\n",countreg); printf("Presione una tecla para continuar...\n"); c=getchar(); return countreg;}//------------------------------------------------------------------------------void edit_menu() {int opt; do { do{ system("cls"); printf("\n Editar Archivo \n"); printf(" ------------------------------------------------------------- \n"); printf("\n 1.- Mostrar la Lista de Archivos \n 2.- Agregar Archivo \n 3.- Eliminar Archivo \n 4.-Guardar Archivo \n 5.- Volver al Menu Principal \n\n"); printf(" ------------------------------------------------------------- \n"); printf("Elija la opcion que desee realizar: "); scanf("%d",&opt); switch (opt){ case 1:{;break;} case 2:{;break;} case 3:{;break;} case 4:{;break;} case 5:{;break;} case 6:{system("cls");return;break;} default :{system("cls");getchar();break;} } }while (opt<1 || opt>6); }while (getchar(), getchar() != 'n');}//------------------------------------------------------------------------------int main(){ project pos[max1]; system("cls"); read_structure(); main_menu();return 0;}//------------------------------------------------------------------------------void main_menu(){int opt;int location;do{ do{ system("cls"); printf("Bienvenido al gestor de proyectos\n\n"); printf("Ingrese una opcion\n\n"); printf("\t 1.- Crear.\n\t 2.- Listar.\n\t 3.- Seleccionar.\n\t 4.- Eliminar.\n\t 5.- Editar.\n\t 6.- Salir.\n"); scanf("%d",&opt); switch (opt){ case 1:{new_project();break;} case 2:{listing();break;} case 3:{location=select();break;} case 4:{;break;} case 5:{edit_menu();break;} case 6:{system("cls");return;break;} default :{system("cls");getchar();break;} } }while(opt < 1 || opt > 6);}while(getchar(), getchar() != 'n');}//------------------------------------------------------------------------------void new_project(){char dummy[50];/************************************************************************************************NEW_PROJECT()------------- Procedimiento que permite al usuario crear un proyecto y guardarlo en el archivo proyectos.db.*************************************************************************************************///Pedimos los datos al usuario project new_project; system("cls"); printf("\t\tCreacion de proyectos\n\t\t------------------------------\n"); printf("\tIngrese el nombre del proyecto\n"); scanf("%s[^\n]",new_project.nombre); gets(dummy); printf("\tIngrese la descripcion\n"); gets(new_project.desc); //scanf("%s[^\n]",new_project.desc); printf("\tIngrese la ubicacion del proyecto\n"); scanf("%s[^\n]",new_project.loc);//Ya tenemos los datos del proyecto. Ahora escribimos en el archivo FILE *id; id=fopen("proyectos.db","a"); fprintf(id,"Nombre:%s\n",new_project.nombre); fprintf(id,"Descripcion:%s\n",new_project.desc); fprintf(id,"Ubicacion:%s\n",new_project.loc); //Delimitador... fprintf(id,"---------------------------------------------------------------\n"); fclose(id); return;//El archivo esta escrito...}//End new project
probaste a que esta bien escrito en el fichero binario y que luego lo lees bien? Me refiero a antes de meterlo en los campos del struct.La verdad es que no me gusta mucho que llames igual a las 2 variables de struct, la del array y la otra.
cosas que se me ocurren:1 intentas meter 100 caracteres en una de 80, es decir line es de 100 pero los campos de tu estructura son de 80.2 has visto si la variable pos en read_project almacena bien el valor de line o es ahi donde te da problemas?
La verdad, no tengo problemas en la escritura del archivo. El problema radica en obtener los datos de los campos en la estructura, ya que cuando lo hace no muestra nada.Que se puede hacer??Salu2 y gracias de todas maneras
CitarLa verdad, no tengo problemas en la escritura del archivo. El problema radica en obtener los datos de los campos en la estructura, ya que cuando lo hace no muestra nada.Que se puede hacer??Salu2 y gracias de todas manerasfread es para leer no para escribir, y te decia que si guardabas los datos de esa manera no tendrias problemas con tus fgets() que como comente lo asigna equitativamente a tus tres variables de la estructura, en pocas palabras cmabiando de metodo tan solo tendrías que hacer una lectura que te asignaria por si sola los datos y lo demas es como poner un numero en un array.