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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


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

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Programa Loteria
« Respuesta #10 en: 17 Enero 2013, 11:44 am »

Viendo nuestro programa nos podrías poner como harías tu el procedimiento buscar, porque a mi me da un bucle infinito y violación del segmento al final, creo que tengo mal hecho el do-while, con esto tendría completo el programa así que estaría muy agradecido si me lo pudieras decir.


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa Loteria
« Respuesta #11 en: 17 Enero 2013, 20:13 pm »

Citar
violación del segmento
este error se debe seguro a un mal uso de los arreglos...

Citar
Viendo nuestro programa nos podrías poner como harías tu el procedimiento buscar
solo modificando las cosas q te marque deberia andar:
Código
  1. void buscar(struct fnum elegido[TAM], char *fichero1, char *fichero2, char *fichero3) { //para buscar los numeros en fichnumeros
  2.        struct cadenacar categoria[TAM];
  3.        char lugar[30];
  4.        int i, x;
  5.        int seguir;
  6.        int numero, serie;
  7.        struct registro registro;
  8.        FILE *result; /* result apunta a "result.dat"*/
  9.        FILE *fich;   // fich apunta a "fichnumerosCompletos.dat"
  10.        FILE *premiotxt;  // premiostxt apunta a "premios.txt"
  11.  
  12.     /* Apertura en modo lectura-escritura. */
  13.     fich = fopen("fichnumerosCompleto.dat", "r");
  14.     result = fopen("result.dat", "wr");
  15.     premiotxt = fopen("premios.txt", "w");
  16.  
  17.        if (result != NULL && fich !=NULL && premiotxt !=NULL);{ /*Comprobación*/
  18.  
  19.        seguir = 1;
  20.            do {
  21.                fread(&registro, sizeof(struct registro), 1, fich);
  22.                for(i =0; i<TAM; i++){
  23.                if ((elegido[i].numero == registro.billete.numero) && (elegido[i].serie == registro.billete.serie)) {
  24.                  //almacena lugar
  25.                        fprintf(result, "%d\t %d\t %s\n",registro.billete.numero, registro.billete.serie,registro.lugar);
  26.                        numero = registro.billete.numero;
  27.                        serie  = registro.billete.serie;
  28.                        strcpy(lugar,registro.lugar);
  29.                        seguir = 0;
  30.                        break; // este break es para que no continue con el for, ya que se encontro el registro
  31.                        }
  32.                  }
  33.                }while (!feof(fich) && (seguir==1));
  34.        fclose(fich);
  35.        fclose(result);
  36.        }
  37. /* ...........*/
la otra mitad de buscar() te toca a vos ya que es parte de la logica del programa, ese es tu trabajo

Otra cosa fijate que en el main tambien tenes errores con los arreglos, por ejemplo en:
Código
  1.  for (i=0; i< TAM; i++){
  2.     premios.numero = azar_numero(intervnum)%9999 +1;
  3.     premios.serie = azar_serie(intervserie);

SAludos


En línea

Ahorrate una pregunta, lee el man
flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: Programa Loteria
« Respuesta #12 en: 18 Enero 2013, 21:51 pm »

a modo  de ayuda para la función buscar
Citar
[ inicio
Función fopen:Esta función sirve para abrir y crear ficheros en disco
Función fscanf:La función fscanf funciona igual que scanf en cuanto a parámetros, pero la entrada se toma de un fichero en lugar del teclado.
Función feof:Esta función sirve para comprobar si se ha alcanzado el final del fichero
Función fclose:Es importante cerrar los ficheros abiertos antes de abandonar la aplicación
fin ]
usar la función fscanf aquí la doc y dos pagina que tiene ejemplos, la función fscanf estaría dentro de un while para que leea todos los renglones, como veras en el ejemplo mucho depende de como sea el archivo que uno lee, podrías poner aunque mas no sea una parte del archivo (fichnumeros.dat)
documentacion :http://www.cplusplus.com/reference/cstdio/fscanf/
ejemplo :http://people.ac.upc.edu/careglio/old/IO/miscellaneous/guides/FormatosScanf.txt
http://www.esdebian.org/foro/3868/c-leer-linea-fichero-fscanf
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa Loteria
« Respuesta #13 en: 19 Enero 2013, 00:08 am »

A pesar de que en la apertura del archivo no aclara el modo "b"(binario), lo mas probable es que este no contenga formato ya que utiliza funciones como fwrite y fread(fscanf en este caso no funcionario)



Saludos
En línea

Ahorrate una pregunta, lee el man
mortaz

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Programa Loteria
« Respuesta #14 en: 19 Enero 2013, 02:05 am »

esta precticamente todo, me imprime en el fichero result, me imprime en el fichero premios.txt y me lee el premios txt pero me queda que me imprima eso ultimo leido me lo imprima de la forma:
Primer premio: 949 8 Sin vender
Segundo premio: 5354 2 Lugo
etc que lo que me hace ahora es imprimirmelo todo seguido. Está de la seguiente manera:

void leerymostrarficherotxt(char *fichtxt){
        FILE *premiotxt;
        char lugar[91];
        //Abrir fichero para lectura de los numeros
     if ((premiotxt = fopen(fichtxt, "r")) == NULL){
        //Si no puede abrise o no existe.
        printf("El fichero '%s' no se puede leer", fichtxt);
        }
     else printf("\n    NUMEROS DE PREMIADOS:\n");
         fscanf (premiotxt,"%s", lugar);
        //Muestra datos por pantalla
        while ( !feof(premiotxt)){                      //Mientras no ha llegado a la marca de fin de fichero lee linea a linea
          printf("%s\t", lugar);                  //Escribe una de las lineas en la pantalla.
          fscanf(premiotxt, "%s", lugar);      //Lee siguiente linea hasta fin de linea o un maximo de 90 caracteres.
                      }
     fclose (premiotxt);
        }



void ponersinvender(char *fichtxt){
        FILE *premiosinvend;
        char lugar[91];

        if ((premiosinvend = fopen(fichtxt, "r")) == NULL){
          //Si no puede abrise o no existe.
           printf("El fichero '%s' no se puede leer", fichtxt);}
        else {printf("\nPremios que no se han vendido:\n");
                fscanf(premiosinvend, "%s", lugar);

          //Muestra datos por pantalla
              while ( !feof(premiosinvend)){                      //Mientras no ha llegado a la marca de fin de fichero lee linea a l$
                if (strstr (lugar, "Sin vender")){     //Si la cadena de busqueda esta incluida en dato
                  printf("%s", lugar);}
                 fscanf(premiosinvend, "%s", lugar);       //Lee la siguiente linea del fichero.
                }
        fclose(premiosinvend);
   }}

si podeis echarle un ojo al de mostrar sin vender que no muestra tambien estaria bien ;) gracias
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa Loteria
« Respuesta #15 en: 19 Enero 2013, 04:05 am »

La verdad no entiendo bien cual es el problema, trata de detallar mas

Pregunta: las dos funciones abren distintos archivos??


Saludos

PD: cuando escribis codigo, arriba a la derecha hay algo que dice GeSHi, elegi donde dice C y pone el codigo dentro de [ code=c ] /* aca va codigo*/[ /code ]... El moderador te lo advirtio, si se lo toma mal por ahi te cierra el post xD
En línea

Ahorrate una pregunta, lee el man
mortaz

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Programa Loteria
« Respuesta #16 en: 19 Enero 2013, 15:59 pm »

Mi fallo esta en la forma de leer el txt, me lee una palabra por bucle, cuando yo quiero leer la línea completa para que así cuando compare con "Sin vender" encuentre coincidencias. Porque ahora lee una sola palabra por bucle y no da ninguna coincidencia porque compara un solo espacio del lugar (sin o vender) con sin vender, y claro, no lo encuentra. Gracias
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa Loteria
« Respuesta #17 en: 19 Enero 2013, 18:33 pm »

fscanf al igual que scanf lee hasta encontrar un blanco(espacio, tabulacion, salto de linea), si queres leer una linea entera tenes la funcion fgets. Pero si tu archivo tiene un formato especifico tambien podes usar fscanf; por ejemplo si el archivo es del tipo:

"123   8   Leo"
"456   2   mortaz"


podes usar algo como:
Código
  1. fscanf(file,"%d %d %s",var1,var2,str);


Saludos
En línea

Ahorrate una pregunta, lee el man
flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: Programa Loteria
« Respuesta #18 en: 20 Enero 2013, 20:59 pm »

haber si entendi elprobema ...me dan un archivo ficnumero.dat donde solo estan los billetes vendidos, genero numero ganador , me fijo del archivo si esta, si esta lo agrego a archivo premio.txt y lo anoto en registro, si no esta genero otro, ...asi 30 veces evidentemente del mismo archivo obtengo los vendidos o no .......por eso decia que la funcion fscanf me parecia lo ideal, como sabran las busqueda sera distinta en base a como esten anotado lo numeros vendidos
02 2154
03 2152
10 2154
o
022154
032152
102154
« Última modificación: 20 Enero 2013, 21:04 pm por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
LOTERIA HELP!!
Java
kawasaki 3 4,734 Último mensaje 27 Diciembre 2008, 16:21 pm
por sapito169
cambiar la hora en la bios, sin que se bloquee un programa de venta de loteria?
Software
todohacker007 1 2,700 Último mensaje 8 Febrero 2011, 05:37 am
por simorg
[principiante] Loteria
Java
Geek7 6 3,263 Último mensaje 28 Junio 2013, 01:47 am
por Mitgus
[Aporte] Loteria en C - Programa que Muestra las cartas en Desorden
Programación C/C++
AlbertoBSD 0 2,912 Último mensaje 12 Junio 2016, 04:18 am
por AlbertoBSD
Ayuda semestral programa de loteria
Programación C/C++
KingAnel 1 1,847 Último mensaje 5 Diciembre 2017, 15:18 pm
por PalitroqueZ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines