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; }