aparte de que el mail es totalmente offtopic, y un codigo con goto es
in-depurable, intentare contestar
no es por declarar z en otra linea
si no por no declarar longitud justo antes de coords, en algun momento
usas algun indice mas sobre coords y sobre escribes z, no pasa nada
porque en el for de z la inicializas, pero si pones longitud como ultima
variable antes de coords, al acceder a coords[4] machacas longitud, no
se en que punto (quiza en if(longitud==4) coords[3-j] = num; -->
coords[-1] = num...), y ya el bucle da una vuelta menos y no rellena las
variables ultimas del vector.
mis consejos:
no uses goto, please
manda estas dudas a listas de programacion en c
depura tu codigo en busca de tus bugs, mas corrientes que los del gcc...
--
Rober Morales Chaparro
http://roberinworld.blogspot.com
MurDoK escribió:
Buenas, hace tiempo que empece a programar en ncurses un juego tipo hundir la
flota y descubrí que depende de si declaraba la variable "z" en una línea
junto a más integers o en otra solo ella, el programa funcionaba o no :|
¿Esto es un fallo mío o del compilador?
(No hace falta que leáis ni entendáis el código pero es la parte en la que la
cpu elige donde situar sus barquitos aleatoriamente)
En el código explico cómo cambiarlo para que funcione y no funcione, fijaos en
el final, si no funciona las dos ultimas cifras siempre son ceros en vez de
una letra seguido de un número. Es muy raro :S
¿Alguna idea?
------------------------------------------------------------------------
// BUG DEL COMPILADOR??
//
// Si definimos el integer z despues del k=0 en la misma linea --> int pos,
num, i, j, k=0, z, longitud;
// La ultima coordenada no sale :| hay que definir aparte la z
// BIEN:
// int pos, num, i, j, k=0, longitud;
// int z;
//
#include <stdio.h>
#include <stdlib.h>
int main()
{
int pos, num, i, j, k=0, z, longitud; // <---------
char coords[4];
char coordenadas_remote[15][2];
char ch;
srand(time(NULL));
for(i=0; i<15; i++) {
coordenadas_remote[i][0] = 0;
coordenadas_remote[i][1] = 0;
}
for(i=0; i<6; i++) {
repeat:
switch(i) {
case 0: longitud=4;
z=0;
break;
case 1:
case 2: longitud=3;
z=4;
break;
case 3:
case 4: longitud=2;
z=10;
break;
case 5: longitud=1;
z=14;
break;
}
ch = (rand()%7); // A-H
num = (rand()%8)+1; // 1-8
pos = (rand()%2); // 0:horizontal - 1:vertical
switch(ch) {
case 0: ch='A';
break;
case 1: ch='B';
break;
case 2: ch='C';
break;
case 3: ch='D';
break;
case 4: ch='E';
break;
case 5: ch='F';
break;
case 6: ch='G';
break;
case 7: ch='H';
break;
}
pos=0; //debug
printf("%c%d %d --> ", ch, num, pos);
for(j=0; j<4; j++)
coords[i] = 0;
if(!pos) { //horizontal
switch(num) {
case 1:
case 2:
case 3:
case 4:
case 5:
for(j=0; j<longitud; j++, num++) {
printf("%c%d ", ch, num);
coords[j] = num;
}
break;
case 6:
if((longitud+4)>7) num--;
for(j=0; j<longitud; j++, num++) {
printf("%c%d ", ch, num);
coords[j] = num;
}
break;
case 7:
if((longitud+4)>7) num=num-2;
else if((longitud+5)>7) num--;
for(j=0; j<longitud; j++, num++) {
printf("%c%d ", ch, num);
coords[j] = num;
}
break;
case 8:
for(j=0; j<longitud; j++, num--) {
if(longitud==4)
coords[3-j] = num;
else if(longitud==3)
coords[2-j] = num;
else if(longitud==2)
coords[1-j] = num;
else
coords[j] = num;
printf("%c%d ", ch, num);
}
break;
}
printf(".. ");
for(j=0; j<longitud; j++)
for(z=0; z<k; z++)
if((ch == coordenadas_remote[z][0]) && \
(coords[j] ==
coordenadas_remote[z][1])) {
printf("REPE!:%c%d\n", ch,
coords[j]);
goto repeat;
}
for(j=0; j<longitud; j++) {
printf("%d ", coords[j]);
sprintf(coordenadas_remote[k], "%c%c",
ch, coords[j]);
k++;
}
printf("k=%d ", k);
}
printf("\n\n");
}
printf("coordenadas: ");
for(i=0; i<15; i++)
printf("%c%d ", coordenadas_remote[i][0],
coordenadas_remote[i][1]);
printf("\n ^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^
^^^^^^ ^^^^^^ ^^");
printf("\n 4 3 3 2
2 1\n\n");
return 1;
}
--
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]