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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con funciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con funciones.  (Leído 3,542 veces)
JimP

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda con funciones.
« en: 30 Mayo 2017, 06:15 am »

Hola, necesito un programa que use funciones creadas por uno mismo y probé este codigo
Código:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int numeroEntero(char op1[50],char op2[50],char op3[50],char op4[50], int min, int max){
int o;
printf("%s\n%s\n%s\n%s\n", op1,op2,op3,op4);
do{ printf("Ingrese una opcion entre %d y %d: ", min, max);
scanf("%d", &o);
} while(o>max || o <min);
return o;
}

int men(x){
int a,b,c,d;
switch (x){
case 1:
a=29;
printf("%d \n",a);
break;
case 2:
b=43;
printf("%d %d \n",a,b);
break;
case 3:
c=55;
printf("%d %d %d \n",a,b,c);
break;
case 4:
d=86;
printf("%d %d %d %d \n",a,b,c,d);
break;
}

}

int main() {
int op;
char op1[50]="1.Opcion 1";
char op2[50]="2.Opcion 2";
char op3[50]="3.Opcion 3";
char op4[50]="4.Salir";
  do{ op=numeroEntero(op1,op2,op3,op4,1,4); //llama a la funcion que valida el numero y muestra el texto con los nombres de las opciones
  men(op);                                                  //llama a la funcion que gestiona el menu
} while(op!=4);


return 0;
}


El problema es que al entrar a la opción 1 la variable a toma el valor de 29, el cual no debería cambiar, pero al entrar a las otras 3 opciones muestra que a toma el valor del número de la opción ingresada.
Por favor alguien me puede ayudar con lo que pasa en el código.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con funciones.
« Respuesta #1 en: 30 Mayo 2017, 09:15 am »

En la construcción switch/case el código salta a la etiqueta elegida. Por ejemplo, al elegirse la opción 3 el programa no sabe nada de la asignación de a ni de la asignación de b por tanto esos datos son indefinidos.


En línea

JimP

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con funciones.
« Respuesta #2 en: 30 Mayo 2017, 13:24 pm »

Es cierto, pero mi problema es que se va entrando a las opciones por orden por lo tanto la variable a, b, c se definen antes de ser imprimidas y la variable es la que cambia mientras que las demas continuan con los valores asignados
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda con funciones.
« Respuesta #3 en: 30 Mayo 2017, 13:33 pm »

No, esto no es una función estática, cada vez que se accede a la función es una nueva instancia en memoria creada en blanco... incluso fíjate que tienes

Código:
int a,b,c,d;

Que indica que estás solicitando memoria para alojar eso

En tal caso para eso, a,b,c y D, deberían ser variables globales

Por cierto, en mem, te faltó declarar que x es de tipo int y como mem es también de tipo int, debe retornar un valor, tu compilador debe marcarte esos errores
« Última modificación: 30 Mayo 2017, 13:35 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
JimP

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con funciones.
« Respuesta #4 en: 30 Mayo 2017, 13:59 pm »

Mi compilador no me marca tales errores y si me ejecuta el programa.
Este es el resultado:

1.Opcion 1
2.Opcion 2
3.Opcion 3
4.Salir
Ingrese una opcion entre 1 y 4: 1
29
1.Opcion 1
2.Opcion 2
3.Opcion 3
4.Salir
Ingrese una opcion entre 1 y 4: 2
2 43
1.Opcion 1
2.Opcion 2
3.Opcion 3
4.Salir
Ingrese una opcion entre 1 y 4: 3
3 43 55
1.Opcion 1
2.Opcion 2
3.Opcion 3
4.Salir
Ingrese una opcion entre 1 y 4: 4
4 43 55 86

--------------------------------
Process exited after 4.485 seconds with return value 0
Presione una tecla para continuar . . .


Ahí se ve como el primer número que devuelve, la variable a, siempre cambia según la opción menos la primera vez.
Y la demás variables no cambian, si no se mantienen con el valor asignado.

Cambie los errores que me dijeron y definí a las 4 variables como globales
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  5.  
  6. int a,b,c,d;
  7.  
  8. int numeroEntero(char op1[50],char op2[50],char op3[50],char op4[50], int min, int max){
  9. int o;
  10. printf("%s\n%s\n%s\n%s\n", op1,op2,op3,op4);
  11. do{ printf("Ingrese una opcion entre %d y %d: ", min, max);
  12. scanf("%d", &o);
  13. } while(o>max || o <min);
  14. return o;
  15. }
  16.  
  17. int men(int x){
  18.  
  19. switch (x){
  20. case 1:
  21. a=29;
  22. printf("%d \n",a);
  23. break;
  24. case 2:
  25. b=43;
  26. printf("%d %d \n",a,b);
  27. break;
  28. case 3:
  29. c=55;
  30. printf("%d %d %d \n",a,b,c);
  31. break;
  32. case 4:
  33. d=86;
  34. printf("%d %d %d %d \n",a,b,c,d);
  35. break;
  36. }
  37. return 0;
  38. }
  39.  
  40. int main() {
  41. int op;
  42. char op1[50]="1.Opcion 1";
  43. char op2[50]="2.Opcion 2";
  44. char op3[50]="3.Opcion 3";
  45. char op4[50]="4.Salir";
  46.   do{ op=numeroEntero(op1,op2,op3,op4,1,4);
  47.   men(op);
  48. } while(op!=4);
  49.  
  50.  
  51. return 0;
  52. }

Y el código si funciona como debería. Gracias!!!
Aunque no entiendo todavía porque el compilador no me marcaba esos errores y porque el valor de las otras variables si me guardaba.
No hacer doble post
« Última modificación: 30 Mayo 2017, 14:52 pm por engel lex » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con funciones.
« Respuesta #5 en: 30 Mayo 2017, 15:30 pm »

Estarás usando TurboC o TurboC++ de Borland o algún otro compilador pre-ansi con extensiones. Te recomiendo cambiarlo lo más pronto posible para evitarte aprender malos hábitos.
En línea

JimP

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con funciones.
« Respuesta #6 en: 30 Mayo 2017, 16:18 pm »

Estarás usando TurboC o TurboC++ de Borland o algún otro compilador pre-ansi con extensiones. Te recomiendo cambiarlo lo más pronto posible para evitarte aprender malos hábitos.
Pues estoy usando el Dev-C++ y no se por cual cambiarlo.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con funciones.
« Respuesta #7 en: 30 Mayo 2017, 17:26 pm »

Eso es un IDE, aunque espero que no sea la versión 4.9.9.2. De todas formas mira si lo que hay en este post te funciona: https://stackoverflow.com/questions/16951376/how-to-change-mode-from-c98-mode-in-dev-c-to-a-mode-that-supports-c0x-ran

Al menos así podrás trabajar con una versión de compilador más moderna.
En línea

JimP

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con funciones.
« Respuesta #8 en: 31 Mayo 2017, 04:27 am »

Bueno muchas gracias a todos.
Lo que estaba en esa página es para C++, pero básicamente si se hace los mismo solo que en lugar de -std=c++11 se pone -std=c11 sirve para C.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con funciones en VB6
Programación Visual Basic
maxinitto 3 6,426 Último mensaje 9 Febrero 2009, 01:40 am
por BlackZeroX
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
‭lipman 9 23,573 Último mensaje 19 Mayo 2011, 23:39 pm
por Littlehorse
(Ayuda), Funciones
Programación C/C++
maxotux 1 1,557 Último mensaje 28 Noviembre 2012, 15:55 pm
por The Swash
Ayuda con funciones en C
Programación C/C++
Reikamoon 4 2,147 Último mensaje 20 Agosto 2013, 10:48 am
por Alien-Z
ayuda con funciones « 1 2 »
Programación C/C++
loadenro 14 3,820 Último mensaje 8 Abril 2014, 17:29 pm
por loadenro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines