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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funcion recibe dos parametros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: funcion recibe dos parametros  (Leído 8,826 veces)
ALONSOQ

Desconectado Desconectado

Mensajes: 62



Ver Perfil
funcion recibe dos parametros
« en: 22 Agosto 2012, 16:53 pm »

Hola me piden el siguiente programa:Cree un programa en el que la función principal reciba dos parámetros, el primero numérico y el segundo una cadena de texto. Compruebe que son correctos, y si no lo son muestre un mensaje por pantalla indicando la sintaxis del programa.

He hecho esto, pero no se seguir, ¿podeis ayudarme por favor?

Código
  1. #include<stdio.h>
  2.  
  3. int main(char argc, char * argv[]) {
  4.  
  5. int i;
  6.  
  7. printf("Argumentos de la línea de órdenes\n\n");
  8.  
  9. printf("dime un número");
  10. gets (*argv);
  11. printf("Dime una cadena de texto");
  12.        gets (*argv);
  13.  
  14. for(i=0; i<argc; i++) {
  15.                   if (argc!=2) printf("error");
  16.  
  17.                 }
  18.  
  19. return 0;
  20.    }

muchas gracias


« Última modificación: 22 Agosto 2012, 16:59 pm por ALONSOQ » En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: funcion recibe dos parametros
« Respuesta #1 en: 22 Agosto 2012, 18:30 pm »

No, eso no va asi, te dejo un ejemplo:
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char* argv[])
  4. {
  5.  printf("Numero de argumentos: %i\n", argc);
  6.  printf("Nombre del programa: %s\n", argv[0]);
  7.  for(int i=1;i<(argc - 1); i++)
  8.   {
  9.      printf("Argumento numero %i: %s", i, argv[i]);
  10.   }
  11.  return 0;
  12. }
  13.  

Saludos.

PD: Veo que has dejado de incluir conio.h en vano, bien hecho ;)


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: funcion recibe dos parametros
« Respuesta #2 en: 23 Agosto 2012, 06:09 am »

Hola! Te voy a decir algo y espero no te lo tomes mal: una cosa es no entender un tema nuevo como el uso de los argumentos del main(que es lo que estas viendo ahora), pero otra cosa es avanzar con mas temas cuando aun no tenes claro lo basico. Creo que ya te marque en otro post ¿por que usas "*" delante del nombre de un arreglo? ¿seguro que entendes como usar bien los arreglos?. Tambien me sorprendio que hagas:
Código
  1. for(i=0; i<argc; i++) {
  2.                   if (argc!=2) printf("error");
  3.  
  4.                 }
no encuentro sentido lo que quisiste hacer y tampoco creo que lo hayas analizado mucho: ¿por que el if dentro del for?... Te recomendaria que sigas practicando con lo basico antes de avanzar con mas temas


Saludos
En línea

Ahorrate una pregunta, lee el man
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: funcion recibe dos parametros
« Respuesta #3 en: 24 Agosto 2012, 17:11 pm »

Hola ALONSOQ . Mira nunca debes pasar argumentos a una funcion con * es recomendable con [] y &, eso depende de los argumentos definidos en las definiciones de las funciones. Si quieres resolver tu problema tendrias que solamente verificar los argumentos pasados a tu codigo y no esperar datos de entradas.

Nota: Aun no se sabe el tipo de verificacion que se quiere, si es que tiene que haber obligatoriamente un argumento numerico o si solo se quiere salida por pantalla del numero de argumentos, bueno esto como quiera te servira !!

Mira te dejo un ejemplo que creo que tambien soluciona tu inquietud:

Código
  1. int main(int argc, char **argv)
  2. {
  3.    //se verifica que en la posicion 1 de tu argumento contenga valores
  4.    //igual pasa con la posicion 2 ya que la posicion 0 no se toca porque es
  5.    //el nombre de tu main.exe y no es lo que se quiere aqui !!!
  6.    if(argv[1]!=0&&argv[2]!=0)
  7.    {
  8.                           printf("Son Correctos !!");
  9.                           }
  10.    else
  11.    {
  12.        printf("No son Correctos");
  13.        }  
  14.  

Tambien podrias verificar los argc y si son <= a 2 entonces no serian correctos los argumentos y tambien pudieras tener una bunea solucion, pero expongo el codigo de arriba para que tengas una idea de los argv[] pasados a una funcion principal.

Suerte !! ALONSOQ  :xD
« Última modificación: 24 Agosto 2012, 17:28 pm por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
ALONSOQ

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: funcion recibe dos parametros
« Respuesta #4 en: 26 Agosto 2012, 20:15 pm »

Hola ALONSOQ . Mira nunca debes pasar argumentos a una funcion con * es recomendable con [] y &, eso depende de los argumentos definidos en las definiciones de las funciones. Si quieres resolver tu problema tendrias que solamente verificar los argumentos pasados a tu codigo y no esperar datos de entradas.

Nota: Aun no se sabe el tipo de verificacion que se quiere, si es que tiene que haber obligatoriamente un argumento numerico o si solo se quiere salida por pantalla del numero de argumentos, bueno esto como quiera te servira !!

Mira te dejo un ejemplo que creo que tambien soluciona tu inquietud:

Código
  1. int main(int argc, char **argv)
  2. {
  3.    //se verifica que en la posicion 1 de tu argumento contenga valores
  4.    //igual pasa con la posicion 2 ya que la posicion 0 no se toca porque es
  5.    //el nombre de tu main.exe y no es lo que se quiere aqui !!!
  6.    if(argv[1]!=0&&argv[2]!=0)
  7.    {
  8.                           printf("Son Correctos !!");
  9.                           }
  10.    else
  11.    {
  12.        printf("No son Correctos");
  13.        }  
  14.  

Tambien podrias verificar los argc y si son <= a 2 entonces no serian correctos los argumentos y tambien pudieras tener una bunea solucion, pero expongo el codigo de arriba para que tengas una idea de los argv[] pasados a una funcion principal.

Suerte !! ALONSOQ  :xD

Muchas gracias fire 544 por tu respuesta, entiendo tu explicación y te la agradezco; y entiendo que en el bucle se requiere que las posiciones 1 y 2 del vector no estén vacías; pero lo que no se es indicarle al codigo que la primera sea un valor numérico y la segunda una cadena de texto ¿ puedes ayudarme con esto?

gracias
En línea

Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: funcion recibe dos parametros
« Respuesta #5 en: 26 Agosto 2012, 20:30 pm »

Mira ALONSOQ puedes optar por concatenar los elementos de argv[] a variables chars de cualquier tamaño y luego verificar que cada posicion de este vector este en un rango de 65 >= 97 que son las posiciones del alfabeto en la tabla ASCII !!!

Mira algo como esto !!!

Código
  1. char arrays[10];
  2.  
  3. strcpy(array, argv[1]);
  4. for(int i=0; i<argc; i++)
  5. {
  6. if(argv[1]!=0)
  7. {
  8. if(array[i]>=65&array[i]<=97)
  9. {
  10. printf("Es una cadena\n");
  11. }
  12. }
  13. }
  14.  

A si puedes hacer con la posicion 2 de argv[] y listo, no he probado el codigo pero creo que no tendras problemas !!
En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
ALONSOQ

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: funcion recibe dos parametros
« Respuesta #6 en: 29 Agosto 2012, 17:19 pm »

Vale, ya lo he entendido, los argumentos al programa se le pasan a traves del compilador dengtro del propio menu ejecutar/parametros ejemplo: 2   hola
argv[1] 2
argv[2] hola

El codigo es este:
Código
  1. int main(int argc, char* argv[])
  2. {
  3.    int i;
  4.  
  5.  printf("Numero de argumentos: %i\n", argc);
  6.  printf("Nombre del programa: %s\n", argv[0]);
  7.  for(i=1;i<(argc); i++)
  8.   {
  9.  
  10. printf("Argumento numero %i: %s\n", i, argv[i]);
  11.  
  12. printf("prueba");
  13.   }
  14.  system("pause");
  15. }
  16.  

ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto?

gracias
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: funcion recibe dos parametros
« Respuesta #7 en: 29 Agosto 2012, 17:30 pm »


ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto?

gracias
En C++ :
Código
  1. #include<cstdio>
  2. bool verificaSiEsCadena(char *stream);
  3. bool verificaSiEsNumero(char *stream);
  4.  
  5. bool verificaSiEsCadena(char *stream)
  6. {
  7.    if(verificaSiEsNumero(stream) == false)
  8.    {
  9.        return true;
  10.    }
  11.    return false;
  12. }
  13. bool verificaSiEsNumero(char *stream)
  14. {
  15.    while(*stream!='\0')
  16.    {
  17.        if(*stream<48 || *stream>57)
  18.        {
  19.            return false;
  20.        }
  21.        ++stream;
  22.    }
  23.    return true;
  24. }
En C:
Código
  1. #include<stdio.h>
  2. int verificaSiEsCadena(char *stream);
  3. int verificaSiEsNumero(char *stream);
  4.  
  5. int verificaSiEsCadena(char *stream)
  6. {
  7.    if(verificaSiEsNumero(stream) == -1)
  8.    {
  9.        return 0;//Si no es numero , retorna 0 porque es una cadena.
  10.    }
  11.    return -1; //Si es numero retorna -1 porque no es una cadena , es un numero.
  12. }
  13. int verificaSiEsNumero(char *stream)
  14. {
  15.    while(*stream!='\0')
  16.    {
  17.        if(*stream<48 || *stream>57)
  18.        {
  19.            return -1;//Si no es numero retorna -1
  20.        }
  21.        ++stream;
  22.    }
  23.    return 0;//Si es numero retorna 0
  24. }
En realidad con la función verificaSiEsNumero te vale (con la otra no), pero bueno.
Esta tabla te ayudará a entender el código , si no lo entiendes dilo :)

¡Un saludo!
« Última modificación: 29 Agosto 2012, 17:42 pm por avesudra » En línea

Regístrate en
Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: funcion recibe dos parametros
« Respuesta #8 en: 29 Agosto 2012, 22:43 pm »

Vale, ya lo he entendido, los argumentos al programa se le pasan a traves del compilador dengtro del propio menu ejecutar/parametros ejemplo: 2   hola
argv[1] 2
argv[2] hola

El codigo es este:
Código
  1. int main(int argc, char* argv[])
  2. {
  3.    int i;
  4.  
  5.  printf("Numero de argumentos: %i\n", argc);
  6.  printf("Nombre del programa: %s\n", argv[0]);
  7.  for(i=1;i<(argc); i++)
  8.   {
  9.  
  10. printf("Argumento numero %i: %s\n", i, argv[i]);
  11.  
  12. printf("prueba");
  13.   }
  14.  system("pause");
  15. }
  16.  

ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto?

gracias

Para la proxima trata de leer bien las respuestas, en la primera respuesta que te doy, puedes hacer mucho con lo que te paso, pero no importa como quiera te paso algo mas correcto y mas entendible !!!.

Aqui tienes una solucion correcta y factible mira, si no comprendes algo postea, pero fijate con el mismo procedimiento (subrutina/funcion) evaluo los dos casos !!

Código
  1. int verificaCadena(char *cadena)
  2. {
  3. //si es mayor o igual a (a) y si es menor o igual a (z)
  4. //entonces es numero sino
  5. //entonces retorna 1 con lo que es cadena !!
  6.    if(*cadena>=48&*cadena<=57)
  7.    {
  8.                               return 0;
  9.                               }
  10.  
  11.    return 1;
  12.    }
  13.  
  14. int main(int argc, char **argv)
  15. {
  16.    //se verifica que en la posicion 1 de tu argumento contenga valores
  17.    //igual pasa con la posicion 2 ya que la posicion 0 no se toca porque es
  18.    //el nombre de tu main.exe y no es lo que se quiere aqui !!!
  19.    if(argv[1]!=0&&argv[2]!=0)
  20.    {
  21. //evaluo la posicion 2 y 1 en busca de elementos, y a si verifico si son correctos
  22.                           if(verificaCadena(argv[2])==1&&verificaCadena(argv[1])==0)
  23.                           {  
  24.                           printf("Son Correctos (Numero y Cadena)!!");
  25.                           }
  26.                           }
  27.    else
  28.    {
  29.        printf("No son Correctos");
  30.        }
  31.        }  
  32.  

Listo espero que tengas Suerte !!  ;-)
« Última modificación: 30 Agosto 2012, 04:49 am por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
ALONSOQ

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: funcion recibe dos parametros
« Respuesta #9 en: 31 Agosto 2012, 18:13 pm »

Estimado Fire,

finalmente a partir de lo que me has ayudado he redactado este código, que creo que funciona perfectamente.

Una duda, probablemente por el bloqueo que tengo con tanto codigo; ¿ como recorre la cadena de letras y numeros que introduzco  como argumentos 1 y 2  para leerleos. Porque con la función verificacadena, si no he entendido mal es para recorrer el argv?

Muchíisimas gracias de nuevo

un saludo
Código
  1. #include <stdio.h>
  2.  
  3.  
  4. int verificaCadena(char cadena[]);
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9.    int i;
  10.  
  11.  
  12.  printf("Numero de argumentos: %i\n", argc);
  13.  printf("Nombre del programa: %s\n", argv[0]);
  14.  
  15.  for(i=1;i<(argc); i++)
  16.   {
  17.      printf("Argumento numero %i: %s\n", i, argv[i]);
  18.   }
  19.  
  20.    if(argv[1]!=0&&argv[2]!=0)
  21.    {
  22.                           if(verificaCadena(argv[2])==1 && verificaCadena(argv[1])==0)
  23.                           {  
  24.                           printf("Son Correctos (Numero y Cadena)!!");
  25.                           }                      
  26.                           else
  27.                           printf("No son Correctos");
  28.   }        
  29.   else
  30.   printf("No son Correctos");
  31.  
  32. }  
  33.  
  34. int verificaCadena(char cadena[])
  35. {
  36. int i;
  37. for (i=1;i<3;i++){
  38.    if(cadena[i]>=65&cadena[i]<=122)
  39.    return 1;
  40.    else
  41.    return 0;  
  42. }
  43. }
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
funcion que devuelva 4 parametros
Programación C/C++
mapers 3 4,699 Último mensaje 4 Diciembre 2010, 04:51 am
por mapers
problema parametros funcion
Programación C/C++
sargo 2 2,305 Último mensaje 24 Marzo 2012, 00:39 am
por Beakman
[javascript] llamar a funcion que se recibe por parametro de la funcion
Desarrollo Web
Graphixx 0 6,012 Último mensaje 24 Abril 2012, 19:36 pm
por Graphixx
Problema con parámetros que recibe main(int argc, char *argv[])
Programación C/C++
antkk 1 2,441 Último mensaje 6 Junio 2015, 14:08 pm
por ivancea96
Windows 10 recibe la función Power Throttling para CPUs Intel
Noticias
wolfbcn 0 1,435 Último mensaje 21 Abril 2017, 21:14 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines