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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ahorcado con ficheros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ahorcado con ficheros  (Leído 4,441 veces)
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Ahorcado con ficheros
« en: 2 Julio 2012, 18:14 pm »

Hola.

Estoy haciendo el juego del ahorcado.

He creado un fichero "prueba.dat", en el que meto palabras separadas por un espacio. Quiero obtener una palabra aleatoria de entre las que tengo.

Todavía no tengo la parte de obtener la palabra aleatoria, pero eso creo que sé hacerlo. El problema es que quiero meter las palabras antes en una matriz.

El programa compila, pero en un momento determinado (que tengo señalado en el programa) deja de funcionar y dice "Ahorcado.exe dejó de funcionar. Windows está buscando la solución al problema"...


Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int NumeroEspaciosBlancos(FILE *fp);
  5. void CogerPalabras(FILE *fp, int num);
  6.  
  7. int main(){
  8.  
  9. FILE *fp;
  10. int num;
  11.  
  12. fp=fopen("prueba.dat", "r");
  13.  
  14.    num=NumeroEspaciosBlancos(fp);
  15.  
  16.    CogerPalabras(fp,num);
  17.  
  18.    fclose(fp);
  19.  
  20. system("pause");
  21.  
  22. }
  23.  
  24. int NumeroEspaciosBlancos(FILE *fp){
  25.  
  26.  char c;
  27.  int i=0 ;
  28.  
  29.  while(feof(fp)==0){
  30.  
  31.  c=fgetc(fp);
  32.  
  33.  if(c==' ') i++;
  34.  
  35.  }
  36.    rewind(fp);
  37.    return i;
  38.  
  39. }
  40.  
  41. void CogerPalabras(FILE *fp, int num){ //num es el número de espacios que tiene el fichero
  42.  
  43.     char **M;
  44.     char c;
  45.     int i=0,j=0;
  46.  
  47.     M=(char**)malloc((num+1)*sizeof(char*));
  48.  
  49.     for(j=0;j<num+1;j++){
  50.  
  51.  
  52.       M[j]=(char*)malloc(20*sizeof(char));
  53.  
  54.       j++;
  55.  
  56.  
  57.     }
  58.  
  59.  
  60.     i=0;
  61.     j=0;
  62.  
  63.     while((feof(fp)==0) && (c=fgetc(fp))){  //EN ESTE BUCLE DEJA DE FUNCIONAR EL PROGRAMA
  64.  
  65.     if(c!=' '){
  66.     M[i][j]=c;
  67.     j++;
  68.  
  69.  
  70.     }
  71.  
  72.     if(c==' '){
  73.     i++;
  74.     j=0;
  75.     }
  76.  
  77.     }
  78.  
  79.     rewind(fp);
  80.     i=0;
  81.     j=0;
  82.  
  83.     for(i=0;i<num;i++){
  84.  
  85.          printf("\n");
  86.     for(j=0;j<20;j++){
  87.     printf("%c", M[i][j]);
  88.     }
  89.  
  90.     }
  91. }
  92.  

Gracias.

Saludos.


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Ahorcado con ficheros
« Respuesta #1 en: 2 Julio 2012, 18:21 pm »

No he mirado el codigo, pero donde dices que se para, en la condicion del while pones un operador de asignacion, y no creo que genere un valor booleano.

Saludos.



En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Ahorcado con ficheros
« Respuesta #2 en: 2 Julio 2012, 18:31 pm »

He hecho bastantes ejercicios en los que pongo esa condición:

Código
  1. while((feof(fp)==0) && (c=fgetc(fp)))

En la primera de las condiciones, comparo el resultado que me da la función feof() con 0, por lo que van dos iguales. En lo segundo, asigno un valor al carácter c (que se puede poner también dentro de un bucle while, pero aunque lo sacara y lo pusiera dentro de las llaves del while, no funciona de todas maneras), por lo que va un solo igual..

Gracias de todas formas.

Saludos.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Ahorcado con ficheros
« Respuesta #3 en: 2 Julio 2012, 18:46 pm »

Pues no se, yo sigo pensando que si le pones &&, este operador devuelve true si las dos(o mas) expresiones devuelven true, y como te he dicho no creo que la asignacion devuelva un valor booleano, entonces nunca entraria en el bucle. De todas formas, que lo diga alguien mas experto.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Ahorcado con ficheros
« Respuesta #4 en: 2 Julio 2012, 18:47 pm »

Pero el problema es que entra en el bucle y por alguna razón se para en algún momento. De todas formas, esa condición la he puesto en varios ejercicios y ha funcionado.

Saludos.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Ahorcado con ficheros
« Respuesta #5 en: 2 Julio 2012, 19:16 pm »

Ya lo he solucionado.

Era antes de entrar al bucle en el que se paraba el programa, al reservar memoria dinámica. Ahora he puesto:

Código
  1. M = (char**)malloc(num * sizeof(char*)); //Inicializamos filas
  2.     for(i = 0; i < num+1; i++) M[i] = (char*)malloc(c * sizeof(char)); //Inicializamos columnas
  3.  

Saludos y gracias.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Ahorcado con ficheros
« Respuesta #6 en: 2 Julio 2012, 22:08 pm »

Citar
no creo que la asignacion devuelva un valor booleano
Hola! acordate que en C cualquier valor distinto de 0 se toma como true por ende lo que se evalua con c=fgetc(fp) es el valor de c, osea el caracter que contiene

Saludos
En línea

Ahorrate una pregunta, lee el man
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
C# el ahorcado
.NET (C#, VB.NET, ASP)
Err... 7 15,367 Último mensaje 10 Enero 2011, 15:24 pm
por Khronos14
Juego del ahorcado C#
.NET (C#, VB.NET, ASP)
treblatp 3 12,626 Último mensaje 3 Febrero 2011, 20:18 pm
por Khronos14
[consulta] ahorcado :B « 1 2 »
Programación C/C++
Darioxhcx 17 10,504 Último mensaje 3 Febrero 2011, 00:41 am
por do-while
ahorcado
Programación C/C++
[JudasTeam]-BUG 8 5,417 Último mensaje 18 Junio 2011, 03:54 am
por BlackZeroX
ahorcado en c
Programación C/C++
chivis cristian 1 2,920 Último mensaje 11 Diciembre 2011, 20:26 pm
por [L]ord [R]NA
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines