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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Llamar a un array de punteros a caracteres en un bucle.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Llamar a un array de punteros a caracteres en un bucle.  (Leído 2,159 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
[C] Llamar a un array de punteros a caracteres en un bucle.
« en: 29 Diciembre 2014, 19:16 pm »

Hola a todos.
El enunciado del libro con el que estoy estudiando dice:
Citar
Escriba un programa que lea un carácter desde el teclado y que pruebe el carácter con cada una de las funciones de la biblioteca de manipulación de caracteres.
Como no quiero utilizar 100 if ni switch se me antojo hacerlo de esta manera, obviamente me da un error que no puedo solucionar, me podrían informar si esto es posible o si estoy proponiendo un disparate.-   

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main(int argc,char **argv){
  5. char a, *funManCad[] = {"islower", "isupper", "isdigit"};
  6. char *mensaje[] = {"una letra minuscula", "una letra mayuscula", "un numero"};
  7. int i;
  8.  
  9. printf("\n Ingrese un caracter cualquiera [confirme con Enter]...:");
  10. a = getchar();
  11. for(i=0; i<3; i++){
  12. if(funManCad[i](a)){
  13. printf("\n Ingreso %s", mensaje[i]);
  14. }
  15. }
  16.  
  17. printf("\n\n Pulse [Enter] para finalizar..."); getchar();getchar();
  18. return 0;
  19. }
 
A simple vista se nota que me faltan muchas funciones, pero esto es sólo para la consulta.-
Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #1 en: 29 Diciembre 2014, 20:26 pm »

Hay varias forma de hacerlo pero esta me parecio mas similar a como lo quieres
eso de poner
Código
  1. char a, *funManCad[] = {"islower", "isupper", "isdigit"};
ya no son funciones sino que las convertistes a un arreglo de caracteres


Código
  1. #include<iostream>
  2. #include <ctype.h>
  3. using namespace std;
  4.  
  5. int main(){
  6.    char ch;
  7.  
  8.   cout<<"Ingrese un caracter "<<endl;
  9.   cin>>ch;
  10.  
  11.   if(islower(ch)) cout<<"Es minuscula"<<endl;
  12.   else if(isupper(ch)) cout<<"Es mayuscula"<<endl;
  13.   else if (isdigit(ch)) cout<<"Es un numero "<<endl;
  14.   else cout<<"No es minisucula, mayusucula o numero"<<endl;
  15.  
  16. cin.get();
  17. cin.get();
  18. return 0;
  19. }

mi version esta en c++ pero creo que se entiende
saludos...


En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #2 en: 29 Diciembre 2014, 20:54 pm »

Hola crack81.
Gracias por ocuparte, eso es precisamente lo que no quiero hacer, utilizar 100 if.-
Acabo de ver una referencia con puntero a función, voy a practicar para intentar lograrlo, de cualquier manera seguramente vos u otro tendrán una manera de hacerlo sin usar if ni switch.-

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #3 en: 29 Diciembre 2014, 22:18 pm »

Bueno antes te doy las gracias porque este tema no lo conocia asi que me puse a investigar y creo que esta es la solucion que buscabas

Código
  1. #include <iostream>
  2. #include <ctype.h>
  3. using namespace std;
  4.  
  5.  
  6. int (*func[])(int) = {islower,isupper,isdigit};
  7. string mensaje[] = {"una letra minuscula", "una letra mayuscula", "un numero"};
  8.  
  9. int main() {
  10.  
  11.  char ch;
  12.  cout<<"ingrese unc caracter "<<endl;
  13.  cin>>ch;
  14.  
  15.  for(int i=0;i<3;i++){
  16.    if((*func[i])(ch)){
  17.       cout<<"ingreso "<<mensaje[i]<<endl;
  18.       break; }
  19.  
  20.  }
  21.   cin.get();
  22.   cin.get();
  23. return 0;
  24. }
  25.  
la verdad muy interesante el tema de punteros a funciones
« Última modificación: 29 Diciembre 2014, 22:19 pm por crack81 » En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #4 en: 29 Diciembre 2014, 22:48 pm »

Hola.
Es precisamente lo que quería lograr, sólo tengo el trabajo de pasarlo de c++ a c, no tengo conocimientos de c++ pero seguramente no debe ser cosa de otro mundo.-
Otra cosita, a las 20.26 no tenías ni idea de “puntero a función” y a las 22.18 ya hiciste un programa, a mí me llevo más de 2 días el tema y por lo visto todavía me falta, te felicito.-     

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #5 en: 30 Diciembre 2014, 03:55 am »

Es precisamente lo que quería lograr, sólo tengo el trabajo de pasarlo de c++ a c, no tengo conocimientos de c++ pero seguramente no debe ser cosa de otro mundo.
La parte relacionada con el uso de punteros a función la puedes utilizar tal cual, sin cambios:
Código
  1. int (*func[])(int) = {islower,isupper,isdigit};
  2.  
  3. /* ... */
  4.  
  5. if ((*func[i])(ch)){

Solo un detalle: la expresión "(*func[ i ])(ch)" es valida pero no es necesario el operador de indirección, se puede utilizar "func[ i ](ch)" sin problemas.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #6 en: 1 Enero 2015, 21:48 pm »

Bueno,..... estuve revisando y convertir de C++ a C encierra unos detalles no tan mínimos  :-\

Debes cambiar los cout a printf, el cin a scanf. Ahora, como C no admite la clase string (C no admite clases), hay que declarar e inicializar el array de mensajes "manualmente". Puede quedar así:

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int (*func[])(int) = {islower,isupper,isdigit};
  5. char *mensaje1 = "una letra minuscula";
  6. char *mensaje2 = "una letra mayuscula";
  7. char *mensaje3 = "un numero";
  8. char *mensaje[3];
  9.  
  10. int main() {
  11.  
  12.    char ch;
  13.    int i;
  14.  
  15.    /* inicializa los mensajes */
  16.    mensaje[0] = mensaje1;
  17.    mensaje[1] = mensaje2;
  18.    mensaje[2] = mensaje3;
  19.  
  20.    printf("ingrese un caracter: ");
  21.    scanf ( "%c", &ch);
  22.    while ( getchar() != '\n' ) ; /* limpiar el bufer de entrada */
  23.  
  24.    for (i=0; i<3; i++) {
  25.        if ((*func[i])(ch)) {
  26.            printf( "ingreso %s\n", mensaje[i] );
  27.            break;
  28.        }
  29.  
  30.    }
  31.  
  32.    //getchar(); /* pausa antes de salir */
  33.    return 0;
  34. }
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #7 en: 3 Enero 2015, 23:22 pm »

Hola yoel_alejandro.
Muchas gracias por ocuparte del paso del programa de c++ a c, funciona a la perfección.-
Igual yo dejo mi versión.-  

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. int main(int argc,char **argv){
  6. int (*pFun[3])(int ) = {islower, isupper, isdigit};
  7. char a,*mensaje[] = {"una letra minuscula", "una letra mayuscula", "un numero"};
  8. int i;
  9.  
  10. printf("\n Ingrese un caracter cualquiera [confirme con Enter]...:");
  11. a = getchar();
  12.  
  13. for(i=0; i<3; i++){
  14. if(pFun[i](a)){
  15. printf("\n Ingreso %s", mensaje[i]);
  16. }    
  17. }
  18.  
  19. printf("\n\n Pulse [Enter] para finalizar..."); getchar();getchar();
  20. return 0;
  21. }

Saludos.
Daniel
« Última modificación: 3 Enero 2015, 23:25 pm por DanielC# » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #8 en: 4 Enero 2015, 01:46 am »

Excelente por tu trabajo te felicito.

Sólo un detalle. ¿Te has preguntado por qué requieres dos getchar() para hacer la pausa al final del programa?
Con uno sólo no funciona  :-\

La razón es que
Código
  1. a = getchar();
descarta la tecla ENTER, y sólo almacena en la variable a el carácter introducido antes del mismo. Entonces dicho ENTER debe ser "limpiado", a eso llamamos limpiar el búfer de entrada. Usamos:
Código
  1. while ( getchar() != '\n' ) ; /* limpiar el bufer de entrada */
y listo ya puedes poner un único getchar() al final del programa para producir la pausa.

Es recomendable siempre "limpiar el búfer" tras un getchar(), un gets() o un scanf() pues estas funciones descartan el carácter de nueva línea.

En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: [C] Llamar a un array de punteros a caracteres en un bucle.
« Respuesta #9 en: 4 Enero 2015, 18:15 pm »

Hola.
Me vino de perillas tu aclaración, si bien ya tengo incorporado lo de limpiar el buffer de entrada (gracias pero muchas gracias a rir3760) que además valida que el ingreso sea sin errores, en este caso lo olvide e iba a hacer una validación porque al ingresar por ejemplo 4b el programa finalizaba abruptamente, con la limpieza del buffer ello no ocurre.-        

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array y bucle for « 1 2 »
Java
Dem0ny 12 8,045 Último mensaje 3 Enero 2010, 23:51 pm
por panaka
Array de punteros.
Programación C/C++
soyloqbuskas 3 8,848 Último mensaje 30 Enero 2012, 20:28 pm
por soyloqbuskas
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,139 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Es posible llamar funciones en un bucle?
Programación C/C++
muymuyperdido 2 1,972 Último mensaje 25 Diciembre 2012, 20:16 pm
por lucaslopez0000
Acceder a los caracteres de un array de punteros
Programación C/C++
David8 5 1,339 Último mensaje 6 Mayo 2014, 12:24 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines