El juego del ahorcado!

Iniciado por kuhi, 24 Abril 2017, 21:34 PM

0 Miembros y 1 Visitante están viendo este tema.

kuhi

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!!!

#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]);
}
}
}
El conocimiento no ocupa lugar, somos libres de saber cuánto queramos...

MAFUS

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
scanf("%i", &choice);

kuhi

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
El conocimiento no ocupa lugar, somos libres de saber cuánto queramos...