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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  El juego del ahorcado!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: El juego del ahorcado!  (Leído 5,849 veces)
kuhi

Desconectado Desconectado

Mensajes: 37


50 shadows of Kappa


Ver Perfil
Re: El juego del ahorcado!
« Respuesta #10 en: 27 Abril 2017, 17:29 pm »

Hola, me sigue sin funcionar.
He probado agrandando los arrays en 1 espacio.
El programa me pide cuantas letras quiero usar para jugar al juego del ahorcado, cuando le digo por ejemplo 5 letras (introduciendo: 5) me da error, me dice el programa dejó de funcionar. No entiendo que está fallando, diría que está mal el random... alguien detecta en que estoy fallando? Si fuera el random, me podríais corregir?
Muchas gracias!!!

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
char palabras5[100][6]={{"CASCO"},
{"ZASKO"},
{"HOLAS"},
{"FAJOS"}};
char palabras6[100][7]={{"FAMAZO"},
{"FAROLA"},
{"FASETA"},
{"FAJOTE"}};
int choice;

printf("Cuantas letras quieres usar?\n");
scanf("%i",choice);

if(choice==5)
{
srand(time(NULL));
{
int rand_num=rand()%6;
printf("%s\r\n",palabras5[rand_num]);
}
}
if(choice==6)
{
srand(time(NULL));
{
int rand_num=rand()%6;
printf("%s\r\n",palabras6[rand_num]);
}
}
}


En línea

El conocimiento no ocupa lugar, somos libres de saber cuánto queramos...
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: El juego del ahorcado!
« Respuesta #11 en: 27 Abril 2017, 18:11 pm »

Siguen siendo problemas con la memoria. En este caso punteros y paso de argumentos por referencia, que no existe en C pero se emula.
Un poco de teoría:
La memoria de un ordenador el lineal y se accede a ella dando al controlador de memoria, que en verdad es un demultiplexor, un número entero sin signo del mismo tamaño en bits que el controlador puede aceptar.
Por otra parte la memoria la maneja el sistema operativo. Éste es el encargado de ofrecer una porción para que tu programa instale en ella su código y sus datos y, por razones de seguridad y para que no puedas interferir con otros programas y servicios del sistema, vigila que tu programa no salga de esa porción asignada.
C es un lenguaje de nivel medio y eso significa que es de tan bajo nivel que el programador puede indicarle qué posición de memoria exacta quiere leer o escribir pero al mismo tiempo es de tan alto nivel que tiene estructuras para no tener que vérselas con saltos manuales y puede encerrar regiones de código en funciones que hacen todo el trabajo de la pila por él.
Los punteros de C son los encargados de guardar las direcciones de memoria a las que queremos acceder.

[ Ya casi termino ]

Todos los argumentos de las funciones se pasan por valor. Eso quiere decir que el dato que recibe la función es una copia del original y por tanto toda modificación que se haga dentro de la función de ese dato sólo afecta a la función. Quien la ha llamado no notará que haya pasado nada.
Para poder cambiar dicho dato hay que pasar la dirección de memoria de éste, así lo que se ha copiado es dicha dirección por tanto dentro de la función está el mismo puntero y se puede acceder y cambiar el contenido de la memoria. Cambiando el contenido de la memoria dentro de la función también se cambia para todo el sistema, así lo que se haga dentro de la función también lo ven desde fuera. Por cierto, el operador que devuelve la dirección de memoria de un dato es el ampersand ( & ).

[Juntándolo todo y resolviendo el error]

La función scanf, para simplificar y en tu contexto, toma un dato del buffer de entrada del mismo formato que le has indicado en la cadena de argumentos, un entero, y lo deposita en la variable que le has indicado.
Pero la función espera un puntero a la variable, por lo que te he expuesto anteriormente, es decir una dirección de memoria válida dentro de tu programa. Al darle directamente choice le dices a scanf que el contenido de choice, vete a saber cuál es, es la dirección de memoria en la que debe depositar lo recogido desde el buffer de entrada. Cómo choice puede contener cualquier cosa lo más seguro es que sea tratado como una dirección de memoria que apunta a un lugar fuera del espacio de tu programa y el sistema operativo, para que no se causen males mayores, lo aborta inmediatamente.
Por tanto debes darle a scanf la dirección de memoria de choice para que ponga el dato en tu variable.
Así el código que debes poner es
Código:
scanf("%i", &choice);


En línea

kuhi

Desconectado Desconectado

Mensajes: 37


50 shadows of Kappa


Ver Perfil
Re: El juego del ahorcado!
« Respuesta #12 en: 27 Abril 2017, 18:30 pm »

Madre mía que error más tonto!!!! Muchas gracias no me puedo creer que se me haya pasado ponerle a un scanf el &... de lo primero que te enseñan 😂😂😂 cuando llegue a casa lo pruebo y comento.
muchas gracias otra vez @MAFUS!!! <3


Enviado desde mi iPhone utilizando Tapatalk
En línea

El conocimiento no ocupa lugar, somos libres de saber cuánto queramos...
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Juego del ahorcado C#
.NET (C#, VB.NET, ASP)
treblatp 3 12,611 Último mensaje 3 Febrero 2011, 20:18 pm
por Khronos14
Juego del Ahorcado
ASM
ziony 1 5,133 Último mensaje 27 Abril 2012, 21:52 pm
por Eternal Idol
JUEGO EL AHORCADO
Java
bengy 2 2,033 Último mensaje 3 Marzo 2014, 16:19 pm
por bengy
Ahorcado (juego en c)
Programación C/C++
Reginald 3 3,034 Último mensaje 26 Enero 2016, 19:10 pm
por WHK
Juego del ahorcado! C
Programación C/C++
kuhi 3 2,945 Último mensaje 21 Abril 2017, 22:29 pm
por kuhi
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines