elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
06 Octubre 2008, 23:17  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderador: ®®)
| | |-+  un asunto que en apariencia funciona pero no hace nada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: un asunto que en apariencia funciona pero no hace nada  (Leído 109 veces)
Kr3c13nt3

Desconectado Desconectado

Mensajes: 15


Ver Perfil
un asunto que en apariencia funciona pero no hace nada
« en: 15 Mayo 2008, 03:42 »

 :-\

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

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

Mensajes: 15


Ver Perfil
Re: un asunto que en apariencia funciona pero no hace nada
« Respuesta #1 en: 16 Mayo 2008, 00:14 »

 lo arregle!!!! ;D

pero aun me faltan cosas por resolver...por ejemplo aparece por pantalla pero NO GUARDA EN TXT LOS datos ingresados. :(
Código:
#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] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats