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

Paso de valores entre funciones

Estas en el tema de Paso de valores entre funciones en el foro de C/C++ en Foros del Web. Hola, recién estoy aprendiendo a programar en c y tengo problemas para entender cómo se pasan los valores de una función a otra....sería fácil si ...
  #1 (permalink)  
Antiguo 08/02/2010, 13:13
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Paso de valores entre funciones

Hola, recién estoy aprendiendo a programar en c y tengo problemas para entender cómo se pasan los valores de una función a otra....sería fácil si los valores se los pasara en el main(), pero tengo que leer primero los datos desde otra función.

El ejercicio es más complejo, pero por ahora esto es lo único que no me queda claro y lo estoy simplificando en este ejemplo:

Gracias de antemano!




Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int leer(int *a, int *b, int *c);
  5. void escribir(int a, int b, int c);
  6.  
  7.  
  8.  
  9. int main()
  10. {
  11.  
  12. int a, b, c;
  13.  
  14. leer(&a,&b,&c);
  15. escribir(a,b,c);
  16.  
  17.  
  18.   return 0;
  19. }
  20.  
  21.  
  22.  
  23. int leer(int *a, int *b, int *c)
  24. {
  25.    printf("Valor de a: ");    
  26.    scanf("%d", &a);
  27.  
  28.    printf("Valor de b: ");    
  29.    scanf("%d", &b);
  30.  
  31.    printf("Valor de c: ");    
  32.    scanf("%d", &c);
  33.  
  34.    printf("\n\n");
  35.      
  36. }
  37.  
  38.  
  39.  
  40. void escribir(int a, int b, int c)
  41. {
  42.  
  43.    printf("%d", a);
  44.    
  45.    printf("%d", b);
  46.  
  47.    printf("%d", c);
  48.    
  49. }
  #2 (permalink)  
Antiguo 08/02/2010, 13:49
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Paso de valores entre funciones

Hay dos maneras de pasar parámetros a una función:

1. Por Valor: aqui lo único que hacemos es pasar los valores de las variables, es decir que así las modifiquemos el valor de ellas dentro de la función este no cambia el valor original de la variable, sino solo a nivel local es decir mientra permanezcamos dentro de la función, ejemplo:


Código C++:
Ver original
  1. void main()
  2. {
  3.    int a=1,b=2,c=3;
  4.  
  5.    escribir(a,b,c);
  6.  
  7.    printf("%d",a); //te darás cuenta que el cambio que le dimos dentro la
  8.                            //función no surte efecto al valor original
  9. }
  10.  
  11. void escribir(int a,int b,int c)
  12. {
  13.    printf("%d\n",a);
  14.    printf("%d\n",b);
  15.    printf("%d\n",c);
  16.    
  17.    a=4;
  18.    printf("%d\n",a); //cambia el valor de a pero solo a nivel local
  19.                               //es decir dentro de la función ya que la variable a
  20.                               //en este momento es considerada variable local de
  21.                               //la función escribir
  22. }

2. Por Referencia: aquí en cambio se pasa la referencia a memoria de la variable enviada como parámetro, es decir, que sin modificamos su valor dentro de la función llamada modificamos el valor de la variable pasa como parámetro. y es el ejemplo de tu función leer, ejemplo:


Código C++:
Ver original
  1. void main()
  2. {
  3.    int a=1,b=2,c=3;
  4.  
  5.    printf("%d",a); //Valor de a = 1
  6.  
  7.    leer(&a,&b,&c); //usamos los & para indicarle la referencia a memoria de
  8.                             // la variable, es decir que le estamos enviando parámetros por
  9.                             //referencia
  10.  
  11.    printf("%d",a); //Valor de a ingresado dentro de la función escribir
  12. }
  13.  
  14. void leer(int *a,int *b,int *c) //de igual manera con el * le indicamos que lo
  15. {                                                 //que vamos a recibir es una referencia a  
  16.    scanf("%d\n",a);                     //memoria del parámetro recibido
  17.    scanf("%d\n",b);
  18.    scanf("%d\n",c);
  19. }
__________________
En programación hay mil y un formas de hacer lo mismo...

Última edición por fradve; 08/02/2010 a las 14:09
  #3 (permalink)  
Antiguo 08/02/2010, 14:06
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Paso de valores entre funciones

Gracias, pero no es la duda que tengo, lo que me has puesto lo tengo claro, ¿pero qué pasa cuando no le estas pasando ningún valor a una función?, cuando llamo a la función leer no le estoy dando los valores de a, b, c...pero si espero que me devuelva los valores que se le han asignado dentro de esta función, para luego pasárselos a otra función, en este caso la función escribir, por eso he hecho el paso de valores por referencia, pero aun así no funciona.
  #4 (permalink)  
Antiguo 08/02/2010, 14:12
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Paso de valores entre funciones

ok, no te funciona porque en tu función leer tiene a las variables de scanf con &:

Código C++:
Ver original
  1. void leer(int *a, int *b, int *c)
  2. {
  3.    printf("Valor de a: ");    
  4.    scanf("%d", &a);
  5.    printf("Valor de b: ");
  6.    scanf("%d", &b);
  7.    printf("Valor de c: ");    
  8.    scanf("%d", &c);
  9.    printf("\n\n");
  10. }

No te funciona porque de hecho ya son referencias a memoria, entonces solo quitale los &:

Código C++:
Ver original
  1. void leer(int *a, int *b, int *c)
  2. {
  3.    printf("Valor de a: ");    
  4.    scanf("%d", a);
  5.    printf("Valor de b: ");
  6.    scanf("%d", b);
  7.    printf("Valor de c: ");    
  8.    scanf("%d", c);
  9.    printf("\n\n");
  10. }
__________________
En programación hay mil y un formas de hacer lo mismo...
  #5 (permalink)  
Antiguo 08/02/2010, 15:04
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Paso de valores entre funciones

ahora si que funciona....Gracias!
  #6 (permalink)  
Antiguo 09/02/2010, 00:51
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Busqueda Respuesta: Paso de valores entre funciones

Hola de nuevo.

El paso de valores se hace perfectamente si se llama a las funciones desde el main(), ¿pero porque no pasa lo mismo al hacerlo desde otra función?, en el código, llamo a la función leer desde la función menú y al terminar quiero volver a la función menú, para luego seleccionar la opción que llamara a la función escribir, pero parece que no funciona ¿qué estoy haciendo mal?


Gracias de antemano.






Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void menu();
  5. int leer(int *a, int *b, int *c);
  6. void escribir(int a, int b, int c);
  7.  
  8.  
  9. int main()
  10. {
  11.  
  12. menu();
  13.                    
  14.   return 0;
  15. }
  16.  
  17.  
  18. void menu()
  19. {
  20. int opcion,a,b,c;
  21.  
  22. printf("1. Leer un numero\n");
  23. printf("2. Escibir numero\n");
  24. printf("0. Salir\n");
  25.  
  26.  
  27. scanf("%d", &opcion);
  28.  
  29.     switch (opcion){
  30.            
  31.            case 1:
  32.                 system("CLS");
  33.                 leer(&a,&b,&c);
  34.                 menu();
  35.                 break;
  36.            case 2:
  37.                 system("CLS");
  38.                 escribir(a,b,c);                
  39.                 menu();
  40.                 break;
  41.            case 0:
  42.  
  43.                 break;
  44.    
  45.            default :
  46.              printf("***Opcion no valida!***\n");
  47.              printf("\n\n");
  48.              menu();
  49.     }
  50. }
  51.  
  52.  
  53. int leer(int *a, int *b, int *c)
  54. {
  55.  
  56.     printf("Valor de a: ");    
  57.     scanf("%d", a);
  58.  
  59.     printf("Valor de b: ");    
  60.     scanf("%d", b);
  61.  
  62.     printf("Valor de c: ");    
  63.     scanf("%d", c);
  64.    
  65.     getch();
  66.     system("CLS");
  67. }
  68.  
  69.  
  70. void escribir(int a, int b, int c)
  71. {
  72.    
  73.     printf("%d\n", a);
  74.  
  75.     printf("%d\n", b);
  76.  
  77.     printf("%d\n", c);
  78.  
  79.    
  80.     getch();
  81.     system("CLS");    
  82. }
  #7 (permalink)  
Antiguo 09/02/2010, 12:37
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Paso de valores entre funciones

Tienes que colocar dentro de a función menú un bucle que mientras se no se cumpla una codición permanezca dentro pueder ser un do while, así:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.    
  4. void menu();
  5. int leer(int *a, int *b, int *c);
  6. void escribir(int a, int b, int c);
  7.  
  8. int main()
  9. {
  10.      menu();
  11.      return 0;
  12. }
  13.  
  14. void menu()
  15. {
  16.      int a,b,c;
  17.      char opcion;
  18.  
  19.        
  20.      do
  21.      {
  22.          system("CLS");
  23.          printf("**** MENU PRINCIPAL ****\n\n");
  24.          printf("1. Leer un numero\n");
  25.          printf("2. Escibir numero\n");
  26.          printf("0. Salir\n");
  27.          opcion=getche();
  28.  
  29.          switch (opcion)
  30.         {
  31.                  case '1':
  32.                               leer(&a,&b,&c);
  33.                               break;
  34.                  case '2': escribir(a,b,c);
  35.                               break;
  36.                  case '0': printf("***Saliendo del Sistema***\n");
  37.                               break;
  38.                  default : printf("***Opcion no valida!***\n");
  39.         }
  40.     }while(opcion!='0');
  41. }
__________________
En programación hay mil y un formas de hacer lo mismo...
  #8 (permalink)  
Antiguo 09/02/2010, 15:12
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Paso de valores entre funciones

Gracias de nuevo!

Etiquetas: funciones
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 01:51.