Páginas: [1]
|
 |
|
Autor
|
Tema: un asunto que en apariencia funciona pero no hace nada (Leído 109 veces)
|
Kr3c13nt3
Desconectado
Mensajes: 15
|
 dado un fichero de extensión *.txt, debe leerlo y almacenarlo en nodos de listas enlazadas. ej: Paz*ElOsito*Santiago*Mercedes666*23*19*1111*33333 #include <stdio.h> #include <string.h>
typedef struct _proyecto { char name_inmobiliaria[10]; char name_proyecto[15]; char comuna[15]; char direccion[20]; int cant_inmuebles; int cant_vendida; int valor_min; int valor_max; struct _proyecto *siguiente; }proyecto; proyecto *proyectos;
proyecto *crea_nodo_proyecto(char name_inmobiliaria[10], char name_proyecto[15], char comuna[15], char direccion[20], int cant_inmuebles, int cant_vendida, int valor_min, int valor_max) { proyecto *nuevo; nuevo=(proyecto *)malloc(sizeof(proyecto)); strcpy(nuevo->name_inmobiliaria, name_inmobiliaria); strcpy(nuevo->name_proyecto, name_proyecto); strcpy(nuevo->comuna, comuna); nuevo->cant_inmuebles=cant_inmuebles; nuevo->cant_vendida=cant_vendida; nuevo->valor_min=valor_min; nuevo->valor_max=valor_max; nuevo->siguiente=NULL; return(nuevo); }
void insertar_proyecto_ordenado(char *name_inmobiliaria, char *name_proyecto, char *comuna, char *direccion, int cant_inmuebles ,int cant_vendida,int valor_min,int valor_max) { proyecto *actual, *nuevo, *anterior, *tmp1, *tmp2; char temp [20]; actual=anterior=proyectos; nuevo=crea_nodo_proyecto(name_inmobiliaria,name_proyecto,comuna,direccion,cant_inmuebles,cant_vendida,valor_min,valor_max); if(proyectos == NULL) { /*si no existe nodo*/ proyectos=nuevo; } else{ /*revisa si el dato del nodo a ingresar es menor que la cabeza*/ if(strncmp(proyectos->name_inmobiliaria, nuevo->name_inmobiliaria, 20)>0) { nuevo->siguiente = proyectos; proyectos=nuevo; } else{ if(proyectos->siguiente == NULL){ proyectos->siguiente = nuevo; } else{ tmp1=proyectos; tmp2=proyectos->siguiente; while( strncmp(tmp2->name_inmobiliaria, nuevo->name_inmobiliaria, 20)<0 && (tmp2->siguiente != NULL) ){ tmp1=tmp2; tmp2=tmp2->siguiente; } /*si se llego al ultimo nodo*/ if(tmp2->siguiente == NULL){ /*si el dato del nuevo nodo es menor que el nodo final de la lista*/ if(strncmp(tmp2->name_inmobiliaria, nuevo->name_inmobiliaria, 20)>0){ nuevo->siguiente = tmp2; tmp1->siguiente=nuevo; }/*el dato del nuevo nodo es el mayor de toda la lista*/ else{ tmp2->siguiente = nuevo; } }/*se inserta en el sector medio de la lista*/ else{ tmp1->siguiente=nuevo; nuevo->siguiente=tmp2; } } } } }
void mostrar_solo_proyectos(proyecto *proyectos) { proyecto *aux; aux=proyectos; printf("\n /x10 ********** LISTA DE PROYECTOS *********\n"); printf("INMOBILIARIA\tPROYECTO\tCOMUNA\tDIRECCION\t\tTOTAL INMUEBLES\tVENDIDOS\tDESDE\tTOPE\n"); while (aux) { printf("%s\t%s\t%s\t%s\t\t%d\t%d\t%d\t%d\n", aux->name_inmobiliaria, aux->name_proyecto, aux->comuna, aux->direccion, aux->cant_inmuebles, aux->cant_vendida, aux->valor_min, aux->valor_max); aux=aux->siguiente; } } void cargar_proyectos() { FILE *file; int count=0; char *tmp=0; char temp[100]=" "; char eol[1]="\n"; //end of line char separar[3]="/n*"; //caracter que avisa su separacion int i=0; int j=0; //variables de origen temporal que seran de tipo char char name_inmobiliaria[10]; char name_proyecto[15]; char comuna[15]; char direccion[20]; char cant_inmuebles_char[2]; int cant_inmuebles; char cant_vendida_char[2]; int cant_vendida; char valor_min_char[6]; //los valores son en UF int valor_min; char valor_max_char[6]; int valor_max; int no_final=0; file=fopen("proyectos.txt", "r"); if (file==NULL) { printf("\n ********* ADVERTENCIA***********\n"); printf("No existe el archivo de datos proyectos.txt\n"); printf("Se creara uno nuevo...\n\n"); file=freopen("proyectos.txt","w",stdout);//aqui se construye uno novo. return; } while (!feof(file)) { temp[i]=fgetc(file); while(temp[i]!=eol[0] && !feof(file)) { i++; temp[i]=fgetc(file); count++; no_final=1; } if (no_final==0) return; while(count<100) { temp[i]=' '; i++; count++; } tmp = strtok(temp,separar); strcpy(name_inmobiliaria,tmp); //pedazo del nombre de inmobiliaria tmp = strtok(NULL,separar); //aqui parten los problemas T.T strcpy(name_proyecto,tmp); tmp = strtok(NULL,separar); strcpy(comuna,tmp); tmp = strtok(NULL,separar); strcpy(direccion,tmp); tmp = strtok(NULL,separar); strcpy(cant_inmuebles_char,tmp); cant_inmuebles=atoi(cant_inmuebles_char); strcpy(cant_vendida_char, tmp); cant_vendida=atoi(cant_vendida_char); tmp=strtok(NULL,separar); strcpy(valor_min_char, tmp); valor_min=atoi(valor_min_char); tmp=strtok(NULL,separar); strcpy(valor_max_char, tmp); valor_max=atoi(valor_max_char); insertar_proyecto_ordenado(name_inmobiliaria,name_proyecto,comuna, direccion, cant_inmuebles,cant_vendida,valor_min,valor_max); i=0; count=0; no_final=0; } fclose(file); }
int main(){ proyecto *proyectos; printf("cargando proyectos..."); cargar_proyectos(); void mostrar_solo_proyectos(proyecto *proyectos); printf("\nmostrando proyectos"); getche(); return 0; }
Sucede que no aparece lo que contiene el archivo. Usando dev-c++, no me tira errores y tampoco me arroja violacion de acceso de memoria.
|
|
|
|
|
En línea
|
|
|
|
Kr3c13nt3
Desconectado
Mensajes: 15
|
lo arregle!!!!  pero aun me faltan cosas por resolver...por ejemplo aparece por pantalla pero NO GUARDA EN TXT LOS datos ingresados.  #include <stdio.h> #include <string.h>
typedef struct _proyecto { char name_inmobiliaria[10]; char name_proyecto[15]; char comuna[15]; char direccion[20]; int cant_inmuebles; int cant_vendida; int valor_min; int valor_max; struct _proyecto *siguiente; }proyecto; proyecto *proyectos;
proyecto *crea_nodo_proyecto(char name_inmobiliaria[10], char name_proyecto[15], char comuna[15], char direccion[20], int cant_inmuebles, int cant_vendida, int valor_min, int valor_max) { proyecto *nuevo; nuevo=(proyecto *)malloc(sizeof(proyecto)); strcpy(nuevo->name_inmobiliaria, name_inmobiliaria); strcpy(nuevo->name_proyecto, name_proyecto); strcpy(nuevo->comuna, comuna); nuevo->cant_inmuebles=cant_inmuebles; nuevo->cant_vendida=cant_vendida; nuevo->valor_min=valor_min; nuevo->valor_max=valor_max; nuevo->siguiente=NULL; return(nuevo); }
void insertar_proyecto_ordenado(char *name_inmobiliaria, char *name_proyecto, char *comuna, char *direccion, int cant_inmuebles ,int cant_vendida,int valor_min,int valor_max) { proyecto *actual, *nuevo, *anterior, *tmp1, *tmp2; char temp [10]; actual=anterior=proyectos; nuevo=crea_nodo_proyecto(name_inmobiliaria,name_proyecto,comuna,direccion,cant_inmuebles,cant_vendida,valor_min,valor_max); if(proyectos == NULL) { /*si no existe nodo*/ proyectos=nuevo; printf("Aki1"); } else{ /*revisa si el dato del nodo a ingresar es menor que la cabeza*/ if(strncmp(proyectos->name_inmobiliaria, nuevo->name_inmobiliaria, 10)>0) { nuevo->siguiente = proyectos; proyectos=nuevo; printf("\nAki2"); } else{ /*tiene un solo elemento en la lista, y como ya se comprobo si el dato del nuevo nodo era menor que la cabeza, significa que este es mayor o igual a ella*/ if(proyectos->siguiente == NULL){ proyectos->siguiente = nuevo; printf("\nAki3"); }/*tiene mas de 2 elementos en la lista*/ else{ /*se referencian los punteros temporales para luego recorrer la lista*/ tmp1=proyectos; tmp2=proyectos->siguiente; printf("\nAki4"); /*se recorre la lista comprobando si no se llego al final y si el dato del nuevo nodo es mayor que los datos de los nodos de la lista */ while( strncmp(tmp2->name_inmobiliaria, nuevo->name_inmobiliaria, 10)<0 && (tmp2->siguiente != NULL) ){ tmp1=tmp2; tmp2=tmp2->siguiente; } /*hay dos formas que pare el ciclo anterior, una es que el elemento a insertar se encuentra en los elementos del centro de la lista, y la otra si se llega al ultimo nodo*/ /*si se llego al ultimo nodo*/ if(tmp2->siguiente == NULL){ /*si el dato del nuevo nodo es menor que el nodo final de la lista*/ if(strncmp(tmp2->name_inmobiliaria, nuevo->name_inmobiliaria, 10)>0){ nuevo->siguiente = tmp2; tmp1->siguiente=nuevo; }/*el dato del nuevo nodo es el mayor de toda la lista*/ else{ tmp2->siguiente = nuevo; } }/*se inserta en el sector medio de la lista*/ else{ tmp1->siguiente=nuevo; nuevo->siguiente=tmp2; } } } } }
void mostrar_solo_proyectos(proyecto *proyectos) { proyecto *aux; aux=proyectos; printf("\n \x10 \x10\x10 LISTA DE PROYECTOS \n"); printf("INMOBILIARIA\tPROYECTO\tCOMUNA\tDIRECCION\tTOTAL\tVENDIDOS\tDESDE\tTOPE\n"); while (aux!=NULL) { printf("%s\t%s\t%s\t%s\t%d\t%d\t%d\t%d\n", aux->name_inmobiliaria, aux->name_proyecto, aux->comuna, aux->direccion, aux->cant_inmuebles, aux->cant_vendida, aux->valor_min, aux->valor_max); aux=aux->siguiente; } }
void insertar_proyecto() { char name_inmobiliaria[15]; char name_proyecto[15]; char comuna[15]; char direccion[20]; int cant_inmuebles; int cant_vendida; int valor_min; int valor_max; printf("Ingrese el nombre de la inmobiliaria:\n"); scanf("%s", &name_inmobiliaria); printf("Ingrese el proyecto de la inmobiliaria:\n"); scanf("%s", &name_proyecto); printf("Ingrese la comuna del proyecto:\n"); scanf("%s", &comuna); printf("Ingrese la direccion del proyecto:\n"); scanf("%s", &direccion); printf("Ingrese la cantidad de inmuebles del proyecto:\n"); scanf("%d", &cant_inmuebles); printf("Ingrese la cantidad vendida de inmuebles del proyecto:\n"); scanf("%d", &cant_vendida); printf("Ingrese el valor minimo del proyecto:\n"); scanf("%d", &valor_min); printf("Ingrese el valor maximo del proyecto:\n"); scanf("%d", &valor_max); insertar_proyecto_ordenado(name_inmobiliaria,name_proyecto,comuna,direccion,cant_inmuebles,cant_vendida,valor_min,valor_max); } void guardar_proyecto(proyecto *proyectoss) { FILE *fileProyecto; fileProyecto = fopen("proyecto.txt", "w"); proyecto *temp; temp = proyectos; while (temp) { fprintf(fileProyecto, "%s*", temp->name_inmobiliaria); fprintf(fileProyecto, "%s*", temp->name_proyecto); fprintf(fileProyecto, "%s*", temp->comuna); fprintf(fileProyecto, "%s*", temp->direccion); fprintf(fileProyecto, "%i*", temp->cant_inmuebles); fprintf(fileProyecto, "%i*", temp->cant_vendida); fprintf(fileProyecto, "%i*", temp->valor_min); fprintf(fileProyecto, "%i\n", temp->valor_max);
temp = temp->siguiente; } fclose(fileProyecto); } void cargar_proyectos() { FILE *file; int count=0; char *tmp=0; char temp[100]=" "; char eol[1]="\n"; //end of line char separar[3]="/n*"; //caracter que avisa su separacion int i=0; int j=0; //variables de origen temporal que seran de tipo char char name_inmobiliaria[10]; char name_proyecto[15]; char comuna[15]; char direccion[20]; char cant_inmuebles_char[2]; int cant_inmuebles; char cant_vendida_char[2]; int cant_vendida; char valor_min_char[6]; //los valores son en UF int valor_min; char valor_max_char[6]; int valor_max; int no_final=0; file=fopen("proyectos.txt", "r"); if (file==NULL) { printf("\n ********* ADVERTENCIA***********\n"); printf("No existe el archivo de datos proyectos.txt\n"); printf("Se creara uno nuevo...\n\n"); file=freopen("proyectos.txt","w",stdout);//aqui se construye uno novo. return; } while (!feof(file)) { temp[i]=fgetc(file); while(temp[i]!=eol[0] && !feof(file)) { i++; temp[i]=fgetc(file); count++; no_final=1; } if (no_final==0) return; while(count<100) { temp[i]=' '; i++; count++; } tmp = strtok(temp,separar); strcpy(name_inmobiliaria,tmp); //pedazo del nombre de inmobiliaria tmp = strtok(NULL,separar); strcpy(name_proyecto,tmp); tmp = strtok(NULL,separar); strcpy(comuna,tmp); tmp = strtok(NULL,separar); strcpy(direccion,tmp); tmp = strtok(NULL,separar); strcpy(cant_inmuebles_char,tmp); cant_inmuebles=atoi(cant_inmuebles_char); strcpy(cant_vendida_char, tmp); cant_vendida=atoi(cant_vendida_char); tmp=strtok(NULL,separar); strcpy(valor_min_char, tmp); valor_min=atoi(valor_min_char); tmp=strtok(NULL,separar); strcpy(valor_max_char, tmp); valor_max=atoi(valor_max_char); insertar_proyecto_ordenado(name_inmobiliaria,name_proyecto,comuna, direccion, cant_inmuebles,cant_vendida,valor_min,valor_max); i=0; count=0; no_final=0; } fclose(file); }
int main(){ printf("cargando proyectos..."); cargar_proyectos(proyectos); insertar_proyecto(proyectos); guardar_proyecto(proyectos); mostrar_solo_proyectos(proyectos); getche(); return 0; }
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|