Cosa c'era di sbagliato ?
Prima cosa presentiamo lo script in modo ordinato, indentando il codice in modo che i blocchi siano ben visibili.
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 8
#define K 5
int main(void){
char a[N][N];
int i, j, numero, g=0, d=0,
posx=(N-1)/2,
posy=(N-1)/2;
srand(time(NULL));
while (g<K){
for(i = 0; i < N; i++)
for(j = 0; j < N; j++){
if(d==0) a[i][j]=' ';
a[i][0]='|';
a[i][N-2]='|';
a[i][N-1]='\n';
a[posx][posy]='*';
}
for(d=1; d<N; d++) printf("=");
printf("\n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++)
printf("%c", a[i][j]);
}
for(d=1; d<N; d++) printf("=");
printf("\n");
numero=(rand()%4);
switch (numero) {
case 0: posx++; break;
case 1: posx--; break;
case 2: posy++; break;
case 3: posy--; break;}
if(posx<=0) posx++;
if(posx>=(N-1)) posx--;
if (posy<=0) posy++;
if (posy>=(N-2)) posy--;
g++;
}
return 0;
}
In secondo luogo, ricordiamoci SEMPRE che le variabili vanno inzializzate, una volta dichiarate.
Guardate il primo while: g potrebbe avere qualunque valore e la condizione specificata potrebbe essere verificata come no.
Passimo poi alla porzione di codice aggiunta: if(d==0) a[i][j]=' ';
Solo la prima volta l'elemento a[i][j] deve contenere quel valore ' ', altrimenti le posizioni successive identificate da posx e posy non saranno riempite da '*'