C/Visual C - error al compilar

 
Vista:

error al compilar

Publicado por Dimus (22 intervenciones) el 10/09/2002 21:06:04
Buenas.
Tengo un problema a la hora de compilar un programa, el mensaje es el siguiente:
programa.c:50: warning: passing arg 2 of `strcmp' makes pointer from integer without a cast.

Seguidamente os pongo el codigo del programa:
La linea 50 esta debajo del comentario: /* ****** LA LINEA DE ABAJO ES LA 50 ******* */


#include <stdio.h>
#include <stdlib.h> /* exit() */
#include <string.h> /* strcmp() */
#include <ctype.h> /* toupper() */

void mensaje_error(void);
char calcular_letra(long int digitos_dni);

int main(int argc,char *argv[])
{
long int digitos_dni;

/* comprobamos si existen errores el los argumentos */
if(argc>4 || ((strcmp(argv[1],"-a")!=0) && (strcmp(argv[1],"-b")!=0)) ){
mensaje_error();
}

/* pasamos el argv[2] a float*/
digitos_dni=atof(argv[2]);


/* ******************** OPCION -A ******************** */
if(strcmp(argv[1],"-a")==0){

/* comprobamos si el dni es valido */
if(digitos_dni>99999999 || digitos_dni<00000000){
puts("\n\nError. Debes de introducir un dni entre 00000000 y 99999999");
mensaje_error();
}

printf("\n\nLos digitos del dni son: %ld",digitos_dni);
printf("\nLetra correspondiente es: %c",calcular_letra(digitos_dni));
puts(INFORMACION);
}


/* ******************* OPCION -B ******************** */
else if(strcmp(argv[1],"-b")==0){

/* comprobamos si el dni es valido */
if(digitos_dni>99999999 || digitos_dni<00000000){
puts("\n\nError. Debes de introducir un dni entre 00000000 y 99999999");
mensaje_error();
}

/* comprobamos si hay los argumentos suficientes */
else if(argc<4){
puts("\n\nERROR. Debes de insertar correctamente los argumentos");
mensaje_error();
}

printf("\nLetra correspondiente es: %c",calcular_letra(digitos_dni));

/* ****** LA LINEA DE ABAJO ES LA 50 ******* */
if(strcmp(argv[3],calcular_letra(digitos_dni))==0){
printf("El dni es correcto");
}

}
return 0;
}


void mensaje_error(void)
{
puts("\n---------------------------------------------------");
puts("| OPCIONES |");
puts("---------------------------------------------------");
puts("| |");
puts("| a)- Insetar DNI para saber la letra del dni. |");
puts("| b)- Verificar si un DNI es verdadero. |");
puts("---------------------------------------------------\n");
exit(1);
}

char calcular_letra(long int digitos_dni)
{

char nif[]={'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E','T'};
long int paso1;
paso1=(digitos_dni/23)*23;
return nif[digitos_dni-paso1];
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:error al compilar

Publicado por Alvaro (122 intervenciones) el 10/09/2002 21:14:27
Facil.
El error es que calcular_letra retorna un char.
strcmp compara dos 'char *'.
te explico la diferencia.
char es una variable para almacenar un caracter.
char * es un puntero a cracteres, una variable que guarda una direccion de memoria en la que se almacena un caracter.
char * es utilizado generalmente para referirse a string.
para solucionar este problema tienes varias alternativas.
puedes modificar calcular_letra para que retorne un char * (string)
puedes copiar lo que calcular_letra retorne en un string del siguiente modo:
char str[2];
str[0] = calcular_letra(...);
str[1] = 0;

y muchar otras alternativas.
SUERTE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar