|
91
|
Programación / Programación C/C++ / Re: Comparando cadenas
|
en: 24 Enero 2012, 10:59 am
|
Hola Tienes 2 fallos: char nombre[10][20], i, aux; for (i=0;i<=10;i++)
1- Tienes declarado aux como char, debes declararlo como: char aux[20]; 2- En el for donde introduces los nombres te sobra el = en i<=10, debe ser i<10 Saludos
|
|
|
92
|
Programación / Programación C/C++ / Re: Problema con strcat
|
en: 22 Enero 2012, 19:16 pm
|
Hola EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto: aux[60]={};
Y ahora me sale bien. ¿Será porque no le di antes un valor a aux? El problema está aquí:
Ya que como bien sabes strcat() se utiliza para concatenar cadenas, entonces lo que hace es añadir detrás del carácter '\0' de aux lo que hay en nombre, pero al no estar inicializado aux, puede que no tenga el carácter '\0', por eso falla. Una solución sería inicializar aux como has hecho o en lugar de concatenar, copiar para darle el primer valor:
Saludos
|
|
|
93
|
Programación / Programación C/C++ / Re: Comparando cadenas
|
en: 22 Enero 2012, 19:05 pm
|
Hola Por lo que parece, el error está en que en gets no puedo poner
Aunque no estoy seguro. No puedes, si te fijas, al poner nombre[ i][20] estás accediendo a un carácter, pero en cada nombre[ i] hay un char[20], por lo tanto debes poner:
Lo mismo pasa con todos los strcmp(), por eso te falla. Debes poner: etc...
Además no es recomendable el uso de gets(), utiliza mejor fgets() Saludos
|
|
|
98
|
Programación / Programación C/C++ / Re: Duda sobre Cuatro en línea
|
en: 19 Enero 2012, 19:12 pm
|
Hola
Tienes razón, en las 3 primeras columnas no funciona el vertical, hice el código a ojo sin probarlo y esto es lo que pasa, pero es fácil de arreglar.
Bueno me alegro de que te haya quedado todo claro.
Saludos
Edito: también pasa lo mismo con las horizontales en las 3 filas de arriba
|
|
|
99
|
Programación / Programación C/C++ / Re: Duda sobre Cuatro en línea
|
en: 19 Enero 2012, 18:31 pm
|
Hola El error que te está dando está en la llamada a la función, tú tienes finPartida(); pero debes pasarle la matriz finPartida(M); Te pongo mi programa y así lo comparas, y si tienes alguna duda pregunta. #include <stdio.h> #define FILAS 8 #define COLUMNAS 8 void mostrarTablero(int m[FILAS][COLUMNAS]); int finPartida(int m[FILAS][COLUMNAS]); int main(void) { int m[FILAS][COLUMNAS]; int i, j, col, jugador, s = 0; int fila[COLUMNAS]; for(i = 0; i < 8; i++) { for(j = 0; j < 8; j++) m[i][j] = 0; fila[i] = 7; } jugador = 1; do { mostrarTablero(m); printf("\nTurno del jugador %d\n", jugador ); do { printf("Introduce la columna (1-8): "); if(fila[col-1] < 0) { col = 0; printf("\nEsa columna esta llena\n\n"); } } while(col < 1 || col > 8); col = col-1; m[fila[col]][col] = jugador; fila[col]--; jugador = 3 - jugador; s = finPartida(m); } while(s == 0); mostrarTablero(m); printf("\n\nGANADOR EL JUGADOR %d\n\n", 3 - jugador ); printf("Pulsa Enter para salir..."); return 0; } void mostrarTablero(int m[FILAS][COLUMNAS]) { int i, j; for(i = 0; i < FILAS; i++) { for(j = 0; j < COLUMNAS; j++) } for(j = 0; j < COLUMNAS; j++) for(j = 0; j < COLUMNAS; j++) } int finPartida(int m[FILAS][COLUMNAS]) { int i, j; for(i = FILAS-1; i >= 3; i--) for(j = COLUMNAS-1; j >= 3; j--) if((m[i][j] == m[i-1][j] && m[i][j] == m[i-2][j] && m[i][j] == m[i-3][j] && m[i][j] != 0) || (m[i][j] == m[i][j-1] && m[i][j] == m[i][j-2] && m[i][j] == m[i][j-3] && m[i][j] != 0) || (m[i][j] == m[i-1][j-1] && m[i][j] == m[i-2][j-2] && m[i][j] == m[i-3][j-3] && m[i][j] != 0)) return 1; for(i = FILAS-1; i >= 3; i--) for(j = 0; j <= COLUMNAS-3; j++) if(m[i][j] == m[i-1][j+1] && m[i][j] == m[i-2][j+2] && m[i][j] == m[i-3][j+3] && m[i][j] != 0) return 1; return 0; }
Saludos
|
|
|
100
|
Programación / Programación C/C++ / Re: Duda sobre Cuatro en línea
|
en: 19 Enero 2012, 18:03 pm
|
Hola Claro, esa matriz. Un ejemplo sería: int finPartida(int m[FILAS][COLUMNAS]) { int i, j; for(i = FILAS-1; i >= 3; i--) for(j = COLUMNAS-1; j >= 3; j--) if((m[i][j] == m[i-1][j] && m[i][j] == m[i-2][j] && m[i][j] == m[i-3][j] && m[i][j] != 0) || /*Aqui comprobamos si hay 4 iguales en la misma fila*/ (m[i][j] == m[i][j-1] && m[i][j] == m[i][j-2] && m[i][j] == m[i][j-3] && m[i][j] != 0) || /*Aqui comprobamos si hay 4 iguales en la misma columna*/ (m[i][j] == m[i-1][j-1] && m[i][j] == m[i-2][j-2] && m[i][j] == m[i-3][j-3] && m[i][j] != 0)) /*Aqui comprobamos si hay 4 iguales en la diagonal principal*/ return 1; for(i = FILAS-1; i >= 3; i--) for(j = 0; j <= COLUMNAS-3; j++) if(m[i][j] == m[i-1][j+1] && m[i][j] == m[i-2][j+2] && m[i][j] == m[i-3][j+3] && m[i][j] != 0) /*Aqui comprobamos si hay 4 iguales en la diagonal secundaria*/ return 1; return 0; }
Aquí debes cambiar FILAS y COLUMNAS por 8, yo lo he hecho genérico. Entonces si devuelve 1 es que hay 4 en raya, si devuelve 0 sigue el juego. Ahora tienes que meter en el main la llamada a esta función, y dependiendo del valor de retorno se acabará el juego o no. Me voy a poner a hacer una versión del juego utilizando lo que llevas hasta ahora, cuando lo termine lo pongo aquí. Saludos
|
|
|
|
|
|
|