Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: francisco11 en 31 Mayo 2013, 17:53 pm



Título: Problemas con strcmp y strcat
Publicado por: francisco11 en 31 Mayo 2013, 17:53 pm
Buenos dias tengo un problema al compilar mi codigo de una sopa de letras y es que me arroja el siguiente error: passing argument 1 of strcmp maske pointer from integer without a cast y no encuentro solucion a ese problema.

#include<stdio.h>
#include<conio.h>
#include <string.h>
main()
{
   char  palabra,n,letras[9][9]=
      {
         {'0','1','2','3','4','5','6','7','8'},
            {'1','B','U','K','J','H','S','T','U'},
            {'2','C','L','A','F','2','R','C','W'},
            {'3','D','E','U','B','L','P','I','X'},
            {'4','X','S','L','O','C','Q','T','Y'},
            {'5','O','R','F','J','H','L','E','Z'},
            {'6','P','A','L','M','A','S','C','K'},
            {'7','Q','R','M','C','T','O','U','P'},
            {'8','Z','K','C','E','E','T','B','Q'},
      };
   int r,c,f,i,x;
   printf ("\n\nSOPA DE LETRAS\n\n");
   printf ("\nInstrucciones:");
   printf ("\nColocar las coordenadas de la letra que deseas escojer en los espacios \ncorrespondientes.");
   printf ("\nNombre del jugador:");
   scanf ("%c",&n);
   clrscr();
   printf("El jugador es: %c",n);
   printf("\nEncuentra las palabras correspondientes en la sopa: \nuabc \npalmas \ncitec");
   for(r=0;r<9;r++)
   {
      for(c=0;c<=8;c++)
      {
         gotoxy(c+10,r+5);printf("%c",letras[r][c]);
      }
   }
   
   printf ("cuantas letras tiene la palabra?");
   scanf ("%d", &f);
   
   
   printf ("\n\nIntroduce en orden las coordenadas de las letras para formar la palabra\n");
   for (i=1;i<=f;i+1)
   {
      printf ("\n\nCoordenada en r %d:",i++);
      scanf("%d",&r);
      printf ("\nCoordenada en c %d:",i++);
      scanf("%d",&c);
      strcat (palabra,letras[r][c]);
   }
   
   x= strcmp (palabra, "uabc");
   if (x==0)
   {
      printf ("FELICIDADES ENCONTRASTE LA PALABRA UABC");
   }
   else
      {
         
      }
   
   
   getch();
}
 


Título: Re: Problemas con strcmp y strcat
Publicado por: rir3760 en 31 Mayo 2013, 19:06 pm
Lo primero que debes hacer es cambiar la definición de la función main y evitar el uso de la biblioteca conio de Borland, las razones se encuentran en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

El error principal ya lo indica el mensaje de error:
Citar
passing argument 1 of strcmp makes pointer from integer without a cast
Se genera en la llamada a strcmp:
Código
  1. char  palabra, ...
  2.  
  3. x = strcmp (palabra, "uabc");
Y la razón es: la función strcmp espera como argumentos las direcciones en memoria de (punteros a) los arrays que almacenan las cadenas a comparar pero tu pasas como primer argumento la variable "palabra" y esta es de tipo char.

Para solucionarlo debes declarar esa variable como un array de caracteres con la capacidad suficiente para cualquier palabra que indique el usuario. También debes agregar el carácter delimitador de cadena '\0' al final de ella y también de todas las almacenadas en el array letras:
Código
  1. char letras[][10] = {
  2.   "012345678",
  3.   "1BUKJHSTU",
  4.   "2CLAF2RCW",
  5.   "3DEUBLPIX",
  6.   "4XSLOCQTY",
  7.   "5ORFJHLEZ",
  8.   "6PALMASCK",
  9.   "7QRMCTOUP",
  10.   "8ZKCEETBQ"
  11. };
  12. char palabra[10];
  13. char n;

Otros errores se encuentran en la parte donde pides cada uno de los caracteres, esta debes cambiarla a:
Código
  1. puts("Introduce en orden las coordenadas de las letras:");
  2. for (i = 0; i < f; i++){
  3.   puts("Numero de fila:");
  4.   scanf("%d", &r);
  5.  
  6.   printf("Numero de columna:");
  7.   scanf("%d", &c);
  8.  
  9.   palabra[i] = letras[r][c];
  10. }
  11. palabra[i] = '\0';

Un saludo