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];
}
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
0