Autor
|
Tema: Ayuda con funciones. (Leído 3,542 veces)
|
JimP
Desconectado
Mensajes: 6
|
Hola, necesito un programa que use funciones creadas por uno mismo y probé este codigo #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
Mensajes: 1.603
|
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
Mensajes: 6
|
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
|
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 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
Mensajes: 6
|
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 #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int a,b,c,d; 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 ); } while(o>max || o <min); return o; } int men(int x){ switch (x){ case 1: a=29; break; case 2: b=43; break; case 3: c=55; break; case 4: d=86; printf("%d %d %d %d \n",a ,b ,c ,d ); break; } return 0; } 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); men(op); } while(op!=4); return 0; }
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
Mensajes: 1.603
|
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
Mensajes: 6
|
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
|
|
|
|
|
JimP
Desconectado
Mensajes: 6
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con funciones en VB6
Programación Visual Basic
|
maxinitto
|
3
|
6,426
|
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
|
19 Mayo 2011, 23:39 pm
por Littlehorse
|
|
|
(Ayuda), Funciones
Programación C/C++
|
maxotux
|
1
|
1,557
|
28 Noviembre 2012, 15:55 pm
por The Swash
|
|
|
Ayuda con funciones en C
Programación C/C++
|
Reikamoon
|
4
|
2,147
|
20 Agosto 2013, 10:48 am
por Alien-Z
|
|
|
ayuda con funciones
« 1 2 »
Programación C/C++
|
loadenro
|
14
|
3,820
|
8 Abril 2014, 17:29 pm
por loadenro
|
|