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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Perdido al crear una función con punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Perdido al crear una función con punteros  (Leído 1,632 veces)
jamatbar

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Perdido al crear una función con punteros
« en: 13 Enero 2014, 18:26 pm »

Buenas, tengo el siguiente código que convierte dos caracteres hexadecimales en su correspondiente número decimal, y que al meter la secuencia qq sale del programa:

Código:
#include <stdio.h>

#define NOERROR 1
#define ERROR 0

int hexDec(char c1, char c2);
int main()
{

  /* Declaramos las variables */
  char car1;
  char car2;

  /* Bucle While para que salga con qq */
  do
    {
      printf("Introduzca dos caracteres hexadecimales: ");
      scanf(" %c %c", &car1, &car2);
     
      hexDec(car1, car2);
     
    }
while(car1 != 'q' && car2 != 'q');

  return 0;
}


int hexDec(char c1, char c2)
{

char v1;
char v2;
int cuno = NOERROR;
int cdos = NOERROR;
int resultado;

 if (c1 != 'q' && c2 != 'q')
        {

          if ('0' <= c1 && c1 <= '9')
            v1 = c1 - '0';
          else if ('A' <= c1 && c1 <= 'F')
            v1 = c1 - 'A' + 10;
          else if ('a' <= c1 && c1 <= 'f')
            v1 = c1 - 'a' + 10;
          else
            {
              cuno = ERROR;
              printf("Error en el primer valor introducido\n");

            }
          if ('0' <= c2 && c2 <= '9')
            v2 = c2 - '0';
          else if ('A' <= c2 && c2 <= 'F')
            v2 = c2 - 'A' + 10;
          else if ('a' <= c2 && c2 <= 'f')
            v2 = c2 - 'a' + 10;
          else
            {
              cdos = ERROR;
              printf("Error en el segundo valor introducido\n");

            }

          if (cuno == NOERROR && cdos == NOERROR)
            {
              resultado = 16 * v1 + v2;

              printf("El valor decimal de 0x%c%c es %d\n", c1, c2,
                     resultado);

            }
        }

cuno = NOERROR;
        cdos = NOERROR;


return resultado;

}

Este código lo entiendo, pero ahora me piden lo siguiente:

Modifique el código añadiendo una nueva función leeCaracter que solicite los dos caracteres hexadecimales, y que devuelva:

- 0 si se ha introducido el código qq de salida.
- 1 si se han introducido dos caracteres hexadecimales correctos

La función también devolverá por referencia los dos caracteres hexadecimales leídos. En el caso de que los caracteres hexadecimales no fuesen correctos, la función deberá volver a solicitarlos. Es decir, la función sólo puede devolver 1 y dos caracteres hexadecimales correctos por referencia, o 0 en caso de que se haya introducido el código qq.

El programa debe quedar así:

salas@318CDCr12: ̃$ ./hexDec7
Introduzca dos caracteres hexadecimales: 22
El valor decimal de 0x22 es 34
Introduzca dos caracteres hexadecimales: 3a
El valor decimal de 0x3a es 58
Introduzca dos caracteres hexadecimales: 3A
El valor decimal de 0x3A es 58
Introduzca dos caracteres hexadecimales: 3G
Error en el segundo valor introducido
Introduzca dos caracteres hexadecimales: -1
Error en el primer valor introducido
Introduzca dos caracteres hexadecimales: tA
Error en el primer valor introducido
Introduzca dos caracteres hexadecimales: qq
salas@318CDCr12: ̃$



Este ejercicio está en el tema de punteros, vamos, que hay que usar punteros en la nueva función, y no sé como meterle mano al problema. Agradecería mucho alguna explicación o modo de actuar.

Gracias de antemano y un saludo!


En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Perdido al crear una función con punteros
« Respuesta #1 en: 13 Enero 2014, 21:09 pm »

Código
  1. int leeCaracter (char *p1, char *p2)
  2. {
  3.    char a, b;
  4.    int correctos = 0;
  5.  
  6.    // lees los caracteres y verificas si son correctos como haces en el main
  7.    // supon que tienes una variable llamada 'correctos' que es 1 si estan bien
  8.    // y 0 si no lo estan
  9.  
  10.    if (correctos)
  11.    {
  12.        // cosas a hacer si son correctos
  13.        // ...
  14.  
  15.        *p1 = a;  // asignas 'a' al caracter apuntado por p1
  16.        *p2 = b;  // asignas 'b' al caracter apuntado por p2
  17.        return 1;
  18.    }
  19.    else
  20.    {
  21.        // cosas a hacer si no son correctos
  22.        // ...
  23.  
  24.        return 0;
  25.    }
  26. }

Y en el main tendrías que llamarla así:

Código
  1. char c1, c2;
  2.  
  3. //...
  4.  
  5. if (leeCaracter(&c1, &c2) == 1)  // te puedes ahorrar el '== 1'
  6. {
  7.     // caracteres correctos
  8.     // c1 tiene el primer caracter y c2 el segundo
  9. }
  10. else
  11. {
  12.     // caracteres incorrectos
  13. }

En la llamada a la función, lo que haces es pasarle la referencia de las variables a la función; es decir, le pasas su dirección de memoria para poder modificar su valor dentro de la función. En este caso, 'c1' es una variable de tipo 'char', y '&c1' es del tipo puntero a caracter o 'char*', que es lo que ve la función.

Un saludo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
funcion palindroma por referencia(con punteros)
Programación C/C++
roser24 1 5,769 Último mensaje 6 Mayo 2010, 03:01 am
por biribau
Crear dos vectores de punteros en java
Java
Cooltan 5 8,026 Último mensaje 12 Abril 2011, 16:52 pm
por zepheon
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,932 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Dudita: Inicializar matriz desde función sin punteros, si es posible.
Programación C/C++
leosansan 2 2,055 Último mensaje 23 Diciembre 2013, 18:47 pm
por leosansan
Demostración de porque los punteros se pasan a función por valor.[C] « 1 2 »
Programación C/C++
NOB2014 10 4,761 Último mensaje 22 Mayo 2016, 21:00 pm
por NOB2014
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines