elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] La duda eterna
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] La duda eterna  (Leído 4,707 veces)
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
[C] La duda eterna
« en: 5 Septiembre 2016, 02:13 am »

Buenas noches gente, tengo una duda, estoy con un programa en el cual paso un array bidimensional de caracteres.

La cosa es que al pasarlo como pasaría un array unidimensional, en la función no es reconocido. La pregunta puntual es:

¿Cómo paso un array bidimensional de caracteres definido dentro del main a una función?. Había solucionado este problema poniendolo como variable global, pero quiero hacerla local.

Si es necesario apunto el código.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] La duda eterna
« Respuesta #1 en: 5 Septiembre 2016, 02:33 am »

Código
  1. int main(){
  2. char variable[N][M];
  3. funcion(variable);
  4. }
  5.  
  6. void funcion(char variable[][]){
  7. //codigo
  8. }
  9.  


En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] La duda eterna
« Respuesta #2 en: 5 Septiembre 2016, 02:39 am »

Así lo hice y nada, te adjunto el main reducido con la función más reducida del programa[..]

EDITO: Ya me acordé como era, debes especificar siempre el tamaño del segundo parámetro del array, es decir las columas. EJ void funcion(array[][4]);


Gracias, pero...

Ahora tengo otra duda, el programa es un TATETI, que esta relleno de numeros el usuario elige el numero donde este sera reemplazado por el simbolo del jugador, una vez que gana, el programa pregunta si se desea volver a jugar, mi idea es colocar alli un llamado a main para que comience el juego nuevamente pero debo limpiar el tablero, es decir llenar el array nuevamente con los numeros originales y no lo podria estar haciendo, al imprimirlo por primera vez lo imprime con los numeros, pero cuando entra en la funcion de comprobacion de si hay ganador, este lo confirma directamente con el tablero viejo.

« Última modificación: 5 Septiembre 2016, 02:48 am por n-utz » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] La duda eterna
« Respuesta #3 en: 5 Septiembre 2016, 02:47 am »

Si lo manejaras como apuntadores la cosa seria mas sencilla:

Código
  1. funcion(char **variable)
En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] La duda eterna
« Respuesta #4 en: 5 Septiembre 2016, 02:50 am »

[...]
EDITO: Ya me acordé como era, debes especificar siempre el tamaño del segundo parámetro del array, es decir las columas. EJ void funcion(array[][4]);


Gracias, pero...

Ahora tengo otra duda, el programa es un TATETI, que esta relleno de numeros el usuario elige el numero donde este sera reemplazado por el simbolo del jugador, una vez que gana, el programa pregunta si se desea volver a jugar, mi idea es colocar alli un llamado a main para que comience el juego nuevamente pero debo limpiar el tablero, es decir llenar el array nuevamente con los numeros originales y no lo podria estar haciendo, al imprimirlo por primera vez lo imprime con los numeros, pero cuando entra en la funcion de comprobacion de si hay ganador, este lo confirma directamente con el tablero viejo.



Tengo que leerme punteros, es algo pendiente hace rato, aca cite mi comentario con mi nuevo problema, te adjunto el codigo lo mas reducido que pueda, a ver si me ayudas.

Código:
void movimientox(char movi, char tateti[][3]);

int main(){

char tateti[3][3]= {'1','2','3','4','5','6','7','8','9'};
int i,j;

char mov, mov2, jugar;

for(i=0;i<3;i++){
        printf("\t");
    for(j=0;j<3;j++){
        printf("%c",tateti[i][j]);

    }
    printf("\n");
}
while(!termina(ganador, tateti)){
printf("\nJuega jugador X\t");
fflush(stdout);
scanf("%c", &mov);
getchar();
movimientox(mov, tateti);
termina(ganador, tateti);
ganador=termina(ganador, tateti);
if(ganador){
    printf("GANO EL JUGADOR X, FELICITACIONES!\n");
    system("pause");
    system("cls");
    printf("Desea volver a jugar? Y/N"  );
    fflush(stdout);
    scanf("%c", &jugar);
    switch(jugar){
        case 'Y': main();
        case 'y': main();
        case 'N': break;;
        case 'n': break;}
}

void movimientox(char movi, char tateti[][3]){
    int x, y;

    for(x=0;x<3;x++){
        printf("\t");
    for(y=0;y<3;y++){
        if(tateti[x][y]==movi)tateti[x][y]='X';

        printf("%c", tateti[x][y]);
    }
    printf("\n");
}}

Coloque solo la parte de la funcion en cuestion, definida arriba.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] La duda eterna
« Respuesta #5 en: 5 Septiembre 2016, 13:45 pm »

Hola, no deberia de llamar a main.

Lo que se debe de realizar es un meter todo en un ciclo do-while y preguntar al usuario por continuar el juego o no.

Código
  1. int main(){
  2. bool entrar = true;
  3. do {
  4. //Inicilizar TATETI, Rellenar la Matriz etc...
  5.  
  6. //JUGAR
  7.  
  8. //Evaluar si el usuario quiere salir
  9. if(something == other) {
  10. entrar = false;
  11. }
  12. }while(entrar);
  13. }
En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] La duda eterna
« Respuesta #6 en: 5 Septiembre 2016, 18:46 pm »

Igualmente no se me soluciona el problema ya que las funciones quedan cargadas con el tablero anterior, por mas que lo inicialice dentro de un bucle.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] La duda eterna
« Respuesta #7 en: 5 Septiembre 2016, 20:29 pm »

Entonces deberías de cambiar el como trabajan esas funciones.

El detalle esta en que no se deberia de llamar a main. Tendrias que tener una función que inicialize el tablero y deje todas las variajes como si nunca si hubiera jugado.

Por ejemplo para reinicializar el tablero

Código
  1. int main(){
  2. bool entrar = true;
  3. char tateti[3][3];
  4. do {
  5.  
  6. for(int i = 0; i < 3;i++){
  7. for(int j = 0; j < 3;j++){
  8. tateti[i][j] = '1' + (i*3) + j;
  9. }
  10. }
  11. //Inicilizar TATETI, Rellenar la Matriz etc...
  12.  
  13. //JUGAR
  14.  
  15. //Evaluar si el usuario quiere salir
  16. if(something == other) {
  17. entrar = false;
  18. }
  19. }while(entrar);
  20. }
  21.  

Asi en cada do el tablero estaria inicializado como la primera vez.

Tendrías que realizar algo similar para las otras variables

Saludos!
En línea

user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: [C] La duda eterna
« Respuesta #8 en: 6 Septiembre 2016, 05:16 am »

Si haces:
Código
  1. int function(int Matriz[][]);
El compilador te dice:
error: declaration of ‘Matriz’ as multidimensional array must have bounds for all dimensions except the first

Por lo tanto la única dimensión de la matriz que puedes dejar vacía es al primera.

Código
  1. #define SIZE 8
  2. int function(int Matriz[][SIZE]);
  3. int main(){}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Batch lenguaje o no ? la eterna pregunta « 1 2 3 4 5 »
Scripting
krackwar 45 24,225 Último mensaje 18 Agosto 2008, 04:10 am
por ~[uNd3rc0d3]~
Energia eterna « 1 2 3 4 »
Foro Libre
Ori-chan 35 17,712 Último mensaje 31 Enero 2013, 00:38 am
por speedman6690
Cifrar y encriiptar la eterna lucha. « 1 2 ... 5 6 »
Foro Libre
m0rf 56 24,012 Último mensaje 13 Abril 2016, 20:19 pm
por Orubatosu
LA ETERNA DUDA (concretando) « 1 2 »
Dudas Generales
4k1l3s 13 10,099 Último mensaje 6 Junio 2017, 14:35 pm
por 4k1l3s
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines