Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: vikour92 en 4 Febrero 2012, 15:43 pm



Título: Problema con array de punteros al pasarlo como argumento en una fucnion (Solved)
Publicado por: vikour92 en 4 Febrero 2012, 15:43 pm
Buenas a todos,

Me estoy leyendo un libro de programación y tengo que hacer un ejercicio que es de hacer un programa que simule barajar cartas.

Resulta que al pasar los dos arrays de punteros que contienen los nombres de las cartas me da error al compilar.

El error es :
-----------------------------------------------------------------------------------------------------------------------
barajar-naipes.c: In function ‘main’:
barajar-naipes.c:18:3: warning: passing argument 2 of ‘mostrarBaraja’ from incompatible pointer type [enabled by default]
barajar-naipes.c:7:6: note: expected ‘const char **’ but argument is of type ‘char **’
barajar-naipes.c:18:3: warning: passing argument 3 of ‘mostrarBaraja’ from incompatible pointer type [enabled by default]
barajar-naipes.c:7:6: note: expected ‘const char **’ but argument is of type ‘char **’
------------------------------------------------------------------------------------------------------------------------

El código C es :

-----------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void barajar(int [][13]);
void resetBaraja(int [][13]);
void mostrarBaraja(int [][13], const char *[], const char *[]);

int main()
{
  int baraja[4][13] = {0};
  char * carta[13] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Jack", "Reina", "Rey" };
  char * palo[4] = {"Picas", "Treboles", "Corazones", "Diamantes"};
  
  srand(time(NULL));
  resetBaraja(baraja);
  barajar(baraja);
  mostrarBaraja(baraja, carta, palo);
  
  return 0;
}

void mostrarBaraja(int baraja[][13], const char *carta[], const char *palo[])
{
  char row, column, leftCard;
  
  for ( leftCard = 0 ; leftCard < 53 ; leftCard++ )
    
    for ( row = 0 ; row < 4 ; row++ )
      
      for ( column = 0 ; column < 13 ; column++ )
   
   if ( baraja[row][column] == leftCard ) {
     printf("%5s de %-8s %c", carta[column],  palo[row], leftCard % 2 ? '\n' : '\t' );
     getchar();
     row = column = 20;
   }
   
}

void barajar(int baraja[][13])
{
  char carta, palo, i;
  
  for (i = 0 ; i < 53 ; i++ ) {
    carta = rand() % 14;
    palo = rand() % 5;
    
    if ( baraja[palo][carta] != -1 )
      i--;
    else
      baraja[palo][carta] = i;
  }
  
  return;
}

void resetBaraja(int baraja[][13])
{
  char i, j;
  
  for ( i = 0 ; i <= 3 ; i++ )
    
    for ( j = 0 ; j <= 13 ; j++ )
      baraja [j] = -1;
}

------------------------------------------------------------------------------------------------------------------------

Gracias por adelantado.


Título: Re: Problema con array de punteros al pasarlo como argumento en una función
Publicado por: naderST en 4 Febrero 2012, 15:57 pm
No son errores son warnings (advertencias) que te da el compilador, como veras estas pasando como parámetro en la función mostrarBaraja() un arreglo de tipo char * y el esperaba un arreglo de tipo const char *

PD: Trata de colocar el código en etiquetas GeSHi


Título: Re: Problema con array de punteros al pasarlo como argumento en una función
Publicado por: vikour92 en 4 Febrero 2012, 16:12 pm
¡Es verdad, gracias!, pero una cosa, estoy quiero recoger el valor como const char * porque el puntero apunta a datos constantes. ¿Eso no debería dar warning no?, ya que los datos no se cambiarán y ¿puedo hacer algo para que no aparezca el warning ?


Título: Re: Problema con array de punteros al pasarlo como argumento en una función
Publicado por: naderST en 4 Febrero 2012, 16:55 pm
Para que no te aparezca el warning coloca el calificador const en estas declaraciones:

Código
  1. char * carta[13] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Jack", "Reina", "Rey" };
  2. char * palo[4] = {"Picas", "Treboles", "Corazones", "Diamantes"};
  3.  


Título: Re: Problema con array de punteros al pasarlo como argumento en una función
Publicado por: vikour92 en 4 Febrero 2012, 17:09 pm
Ok muchisimas gracias