Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Error con una función

Estas en el tema de Error con una función en el foro de C/C++ en Foros del Web. Buenos dias comunidad de forosdelweb, estoy empezando con c, y voy en el tema de las funciones, ya manejo los conceptos, pero a la hora ...
  #1 (permalink)  
Antiguo 28/02/2014, 07:22
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Error con una función

Buenos dias comunidad de forosdelweb, estoy empezando con c, y voy en el tema de las funciones, ya manejo los conceptos, pero a la hora de crear mi primer programa con funciones me da algunos errores, ,el programa lo unico que haca es pasar un caracter a float, a través de una función llamada hazlo dejo el codigo para que me ofrezcan ideas de como resolverlo gracias, al imprimir los valores imprime solo ceros, y solo me deja scanear 2 datos, cuando deberian ser 3

Código:
#include <stdio.h>
#include <conio.h>
char a,b,c;
float z;
float hazlo(float a, float b,float c);
main()
{
      
      
      
      
      printf("\nIngrese 3 letras ");
      scanf("%c%c%c",&a,&b,&c);
      
        z=hazlo(a,b,c);
        printf("\n Valores: %.2f %.2f %.2f ",a,b,c);
        getch();
        }
      
      
      float hazlo (float a, float b,float c)
      {
           return a;
           return b;
           return c;
           }

Última edición por TriN; 28/02/2014 a las 08:59
  #2 (permalink)  
Antiguo 28/02/2014, 09:04
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Error con una función

Hola. Antes que nada, por qué indentas tu código de esa manera?

Con respecto a tu problema, no puedes retornar más de un valor en una función. En tu función hazlo(), su ejecución se detendrá en la primera línea "return a;", es decir, las otras dos líneas nunca se van a ejecutar.

De todas maneras tu código tampoco funcionaría porque estás guardando el valor de retorno en una variable z, pero luego no la usas, vuelves a imprimir los valores a, b, y c.

  #3 (permalink)  
Antiguo 28/02/2014, 09:25
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error con una función

Hola Carbon gracias por tu pronta repuesta, y tienes toda la razón estoy guardando el valor en la variable Z que no estoy usando, además me acabas de comentar que cuando llamo a la función solo tomara el primer return, como podria lograr que retorne los otros 3 datos? ya he mejorado un poco el codigo, ya devuelve el numero del codigo ascii, pero solo del primer valor a los demas es decir b y c, no los devuelve como haria para que llame a la funcion 3 veces en a b y c gracias de antemano dejo el codigo

Cita:
#include <stdio.h>
#include <conio.h>
char a,b,c;
float z,x,w;
float hazlo(float a, float b,float c);
main()
{




printf("\nIngrese 3 letras ");
scanf("%s%s%s",&a,&b,&c);

z=hazlo(a,b,c);
x=hazlo(a,b,c);
w=hazlo(a,b,c);
printf("\n Valores: %.2f %.2f %.2f ",z,x,w);
getch();
}


float hazlo (float a, float b,float c)
{
return a;
return b;
return c;
}
  #4 (permalink)  
Antiguo 28/02/2014, 09:31
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error con una función

Lo logre resolver cambiando la posicion de los argumentos, pero mi pregunta es la manera correcta de hacerlo ? aqui les dejo el cod y gracias nuevamente.

Cita:
#include <stdio.h>
#include <conio.h>
char a,b,c;
float z,x,w;
float hazlo(float a, float b,float c);
main()
{




printf("\nIngrese 3 letras ");
scanf("%s%s%s",&a,&b,&c);

z=hazlo(a,b,c);
x=hazlo(b,c,a);
w=hazlo(c,a,b);
printf("\n Valores: %.2f %.2f %.2f ",z,x,w);
getch();
}


float hazlo (float a, float b,float c)
{
return a;
return b;
return c;
}
  #5 (permalink)  
Antiguo 28/02/2014, 12:09
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Error con una función

Creo que hay errores de concepto en el programa.

Como dice carbon, una función solo retorna un valor.
Así que ésta expresión:
Código C++:
Ver original
  1. float hazlo (float a, float b,float c)
  2. {
  3. return a;
  4. return b;
  5. return c;
  6. }

sólamente retornará el primer valor.

¿Por qué has conseguido que te funcione la función?
Cuando hablamos de parámetros, no hay una identificación del parámetro por nombre, sino por posición.

Entonces, cuando haces una llamada a la función así:
Código C++:
Ver original
  1. z=hazlo(a,b,c);

la variable char a de la función principal (main) pasa a ser el parámetro float a de la función con la firma:
Código C++:
Ver original
  1. float hazlo (float a, float b,float c);
cuando haces:
Código C++:
Ver original
  1. x=hazlo(b,c,a);
pues igualmente, ahora char b es float a en la función
e igualmente
Código C++:
Ver original
  1. w=hazlo(c,a,b);
hace que char c sea float a

Como ves, lo único que has hecho es 3 llamadas a la función, cambiando la posición de las variables, y la función sólo te va a retornar el primer valor. Y eso no tiene mucho sentido, porque ingresas 3 variables como argumento, de la cual sólo te evalúa una.

Es como si hubieras hecho así:

Código C++:
Ver original
  1. float hazlo (float a)
  2. {
  3. return a;
  4. }

Y luego las llamadas a la función fueran así:

Código C++:
Ver original
  1. z=hazlo(a);
  2. x=hazlo(b);
  3. w=hazlo(c);

Obtendrías el mismo resultado.
  #6 (permalink)  
Antiguo 28/02/2014, 12:45
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Error con una función

dehm ya dijo todo, sólo para agregar que si quieres que tu función devuelva muchos valores tienes que usar punteros. Aún así una función siempre devuelve solo un valor.

  #7 (permalink)  
Antiguo 28/02/2014, 17:41
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error con una función

Muchisimas gracias, mas claro imposible, ahora a seguir practicando.
  #8 (permalink)  
Antiguo 28/02/2014, 18:32
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Error con una función

para que una funcion "retorne" mas de un parámetro y lo digo entre comillas por que en realidad no lo retorna, debes utilizar acción envés de función.
Con una acción le puedes pasar varios parámetros y te los "retorna" cuantos quieras.
¿Como es eso de acción?
Te dejo aquí la explicación:
http://www.youtube.com/watch?v=1lk3hMqk0Tw
https://www.youtube.com/watch?v=cicFrj4TRJ0
https://www.youtube.com/watch?v=8g9bdT005a8

Si haces return la función se detiene ahí justo en el return, pero si envés de devolver con return usas punteros o referencias puedes "retornar" mas de un valor.
En realidad no se retorna nada sino que la operación se realiza sobre los mismos valores que pasas por parámetros como punteros.
Un puntero es una simples variable que dice donde esta guardada otra variable en la memoria.
Vemos como es esto y veras que si se puede hacer tal como lo planeabas XD

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. /*prototipo de accion*/
  5. void hazlo ( char * a, char * b, char * c, float * z, float * x, float * w );
  6.  
  7. main() {
  8.     char  a, b, c; /*las variables donde guardamos los char*/
  9.     float z, x, w; /*las variables donde guardaremos abc despues de convertirlas a float*/
  10.     printf ( "\nIngrese 3 letras " );
  11.     scanf ( "%c%c%c", &a, &b, &c );
  12.     /*A la accion le enviamos a, b y c. Los convertira en float y los guardara en z,x y w  todo es usando punteros y no return*/
  13.     hazlo ( & a, &b, &c, &z, &x, &w );
  14.  
  15.     printf ( "\n Valores: \nfloat a: %.2f \nfloat b: %.2f \nfloat c: %.2f ", z, x, w );
  16.     getch();
  17. }
  18.  
  19. //accion
  20. void hazlo ( char * a, char * b, char * c, float * z, float * x, float * w ) {
  21.     *z=((float)*a); // hacemos un cast de char a float(convercion)
  22.     *x=((float)*b); // hacemos un cast de char a float(convercion)
  23.     *w=((float)*c); // hacemos un cast de char a float(convercion)
  24. }

como ves aqui hay cosas que quizas no ayas visto, cosas como * y &, eso es tema de punteros.

Los temas implicados son punteros y acción, también esta la referencia pero me parece que solo para cpp.
Si aun eres muy nuevo a la programación creo que punteros es un tema escabroso y debes tomarlo con calma.
La potencia de los punteros es ilimitada pero no lo debes tomar a la ligera.
Si sigues alguna clase de cursos en libro o algo sigue el ritmo del libro y no avances hasta tener claro el tema actual.
Si te sientes preparado para punteros en la misma pagina de los vídeos que te envié tienes vídeos sobre punteros.
Son sobre cpp pero los punteros son lo mismo en c o cpp, a lo mejor allí para mostrar algo por pantalla el usa cout, pero tu lo haces con printf ;)
O mejor solo mire la teoría y programes como sabes hacer.
Cosas como funciones, punteros, tablas son lo mismo o cambia muy poco.
Los vídeos son solo para que entiendas que es una acción, lo mejor es que sigas con tu libro o lo que sea XDD
Suerte.

Última edición por vangodp; 28/02/2014 a las 18:38
  #9 (permalink)  
Antiguo 01/03/2014, 11:16
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error con una función

vango gracias por reforzar la información y por los videos, es correcto estoy siguiendo un libro el titulo es aprendiendo C en 21 dias de Peter Aitken, ademas que me estoy iniciando en la programacion por la universidad, asi que toda esta información me resulta muy importante, sin embargo hay que llevarla con calma, y tener un buena base de lo basico,
  #10 (permalink)  
Antiguo 01/03/2014, 19:51
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Error con una función

Perfecto TriN, no corra;)
Ve paso a paso intentando comprender bien, cuando tengas el tema actual dominado avanzas al próximo.

Y por supuesto no escatimes en volver y releer lo que ya has aprendido (Repasada a menudo).

Salu ;)
  #11 (permalink)  
Antiguo 02/03/2014, 09:56
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Error con una función

Antes que nada recuerda declarar main como int, así lo exige el estándar, con su correspondiente return.

Creo que no se han fijado en que el autor del tema tiene declaradas las variables como globales, con lo que en este caso no hace falta más que una llamada a la función sin necesidad de usar punteros:

Cita:

Ingrese 3 letras asd

Valores: 97.00 115.00 100.00

Process returned 0 (0x0) execut
Press any key to continue.
Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. char a,b,c;
  4. float x,y,z;
  5. void float_( char a, char b, char c );
  6. int main()
  7. {
  8.   printf("\nIngrese 3 letras ");
  9.   scanf("%c%c%c",&a,&b,&c);
  10.   float_ (a,b,c);
  11.   printf("\n Valores: %.2f %.2f %.2f ",x,y,z);
  12.   getch();
  13.   return 0;
  14. }
  15.  
  16. void float_( char a, char b, char c )
  17. {
  18.     x=((float)a);
  19.     y=((float)b);
  20.     z=((float)c);
  21. }

¡¡¡Saluditos!!!


Etiquetas: funcion, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:47.