| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
joni
Registrado: 01 Oct 2007 Mensajes: 3
| Publicado: 01/10/2007 4:50 pm | | | Título: programa de sopa letras |
| una consulta tengo este codigo de una sopa de letras pero cuando quiero ejecutarlo no me funciona, al compilarlo no me manda niun error pero al ejecutarlo la pantalla de ms dos desaparece
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ENTRADA "SOP.DAT" #define SALIDA "SOP.RES"
FILE *FileIn,*FileOut; int x,y; char Tabla[105][105]; char Palabra[25]; int DirX[8]={1,-1,0,0,1,-1,-1,1}; int DirY[8]={0,0,1,-1,1,-1,1,-1};
void Buscar();
int main() { int i,j,n; FileIn=fopen(ENTRADA,"r"); FileOut=fopen(SALIDA,"w"); if (FileIn==NULL || FileOut==NULL) exit(1); fscanf(FileIn,"%d %d\n",&x,&y); for (i=0; i<x; i++) { for (j=0; j<y; j++) fscanf(FileIn,"%c",&Tabla[i][j]); fgetc(FileIn); } fscanf(FileIn,"%d",&n); for (i=0; i<n; i++) { fscanf(FileIn,"%s",&Palabra); Buscar(); if (i!=n-1) fprintf(FileOut,"\n"); } return 0; }
void Buscar() { int i,j,d,a,b,p,letras; int fin=0; letras=strlen(Palabra); for (i=0; i<x && !fin; i++) { for (j=0; j<y && !fin; j++) for (d=0; d<8 && !fin; d++) { for (a=i,b=j,p=1; Palabra[p-1]==Tabla[a][b] && p<=letras && a>=0 && a<x && b>=0 && b<y; p++,a+=DirX[d],b+=DirY[d]) if (p==letras) { fprintf(FileOut,"%d %d %d %d",i+1,j+1,a+1,b+1); fin=1; } } } if (fin==0) fprintf(FileOut,"???"); } |
| | Volver arriba | |  | digies
Registrado: 18 Nov 2005 Mensajes: 379 Ubicación: Cono Sur
| Publicado: 01/10/2007 6:09 pm | | | Título: |
| Hola
| Cita: | | ... al compilarlo no me manda niun error... |
Verifica que tu compilador no te tire ningún Warning.
| Cita: | | ... la pantalla de ms dos desaparece... |
Colócale un system("PAUSE"); antes del return 0 del main principal.
Un saludo |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3841 Ubicación: Mexico
| Publicado: 02/10/2007 9:27 am | | | Título: |
| Tambien tendrias que explicar mejor (en detalle) cual es la estructura de cada uno de los archivos y tambien que esperas realizar con cada uno de los bucles en tu programa.
Te pongo un ejemplo de lo que parece un error. Al procesar el archivo de entrada lees dos numeros de este, al parecer el numero de cadenas en el archivo y la longitud de cada una de estas.
A continuacion utilizas un bucle pero dentro de este lees los datos conf fscanf utilizando el indicador de tipo "%c", el problema es que a diferencia de los demas indicadores como "%d" o "%s" este ("%c") no ignora el espacio blanco y el resultado de esto es que el primer caracter almacenado en Tabla[0][0] es el caracter de nueva linea o '\n' situado al final de la primera linea:
| Código: | fscanf(FileIn,"%d %d\n",&x,&y); /* el '\n' se queda en el bufer ... */
for (i = 0; i < x; i++){ for (j = 0; j < y; j++) /* ... y es procesado por la primera iteracion */ fscanf(FileIn,"%c",&Tabla[i][j]); fgetc(FileIn); } |
Para evitar esto se debe descartar el resto de la primera linea antes de entrar en los bucles mediante un bucle while de esta forma:
| Código: | int ch;
/* ... */
fscanf(FileIn,"%d %d\n",&x,&y); while ((ch = fgetc(FileIn)) != EOF && ch != '\n') ; /* se descarta el resto de la primera linea */
for (i = 0; i < x; i++){ for (j = 0; j < y; j++) fscanf(FileIn,"%c",&Tabla[i][j]); fgetc(FileIn); } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |