Bienvenido al foro.
Lo primero que deberías corregir es el tema de las variables globales. No es una buena idea poner todas las variables disponibles a nivel global, es una práctica que da muchísimos problemas. Es mejor que te acostumbres a declarar las variables dentro de las funciones.
Bueno, tu error:
scanf_s necesita almacenar el valor introducido por teclado en
num. Para que esto sea posible la función espera recibir un puntero... y tu le estás pasando la variable por valor. Esto hace que la función intente escribir en una posición arbitraria de la memoria y, como es de esperar, el sistema operativo mata tu programa por precaución.
¿Solución? Pasarle un puntero que es lo que espera:
Sugerencia: si la secuencia del juego la tratas como una cadena de caracteres en vez de como números conseguirás varias ventajas:
- El primer elemento de la secuencia podrá ser un 0
- No tendrás que separar los dígitos que componen cada elemento de la secuencia
Otro consejo: Cuando tu realizas una comparación se genera un entero que puede valer 0 o 1. Esto lo puedes aprovechar para calcular el número de aciertos de una forma un poco más elegante:
Código C:
Ver originalaciertos = (d1==a1)+(d2==a2)+(d3==a3)+(d4==a4);
Y, por cierto, la variable "posicion" no es necesaria en absoluto. Se supone que has ganado si el número de aciertos es igual al número de elementos en la secuencia, en este caso 4... ahorrarte variables innecesarias mejora la calidad de tu código.
Un saludo.