![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Mejor forma de pasar conjunto de funciones
Hola:
Antes usaba el uso de void sin devolver valor. Un amigo me dijo en esta semana que mejor que te devuelva un valor, un número al acabar una función con argumento tipo int, que te devuelva un número en Return. Es para salir de la función con un valor en vez de usar void (vacío). Con este valor sales de la función y va hacia un Swtich Case, para elegir menús. Por ejemplo en este vídeo. Hay partes del menú con submenú donde dice > ATRÁS INICIO. Ver vídeo. Si pulsa > ATRÁS, sale de la función. Si pulso > INICIO, voy a otra función sin salir de esta, en el cual crea una pila de memoria y esto no interesa, porque se gasta, y también tiene comportamientos no deseados cuando usa variables estáticas ya que vuelve a la función por donde iba al salir. Es decir, a la hora de crear menús y menús, lo hacía como si estuviera haciendo una página Web html, poniendo enlaces en una ventana a otra o archivos.html en el cual no hay ningún problema de pilas de memoria o StackOverflow. Da igual en que menú o submenú estés, también funciona el puerto serie como entrada de datos y esto debe almacenarse en variables internas, luego voy a mirar por el menú y veo sus datos. ¿Algún consejo sobre diseño con C# modo consola? Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
#2
|
|||
|
|||
puedes hacer las funciones de menus de esta forma
void Menu_Principal(void) { //muestras con printf() o lo que sea las opciones en la consola //coges con getch() o con Scanf() la opcion que elige el usuario //finalmente llamas a la funcion que corresponda a esa opcion de menu con un switch o con varios IF (Altas, Bajas, Modificaciones o lo que sea) } |
#3
|
|||
|
|||
te pongo un ejemplo en C++ Builder
(las funciones textattr(), gotoxy(), cprintf() y clrscr() podrian ser especificas de C++ Builder recuerda eso ![]() Código:
#include <iostream> #include <tchar.h> #include <stdio.h> #include <conio.h> int Menu_Principal(void); int _tmain(int argc, _TCHAR* argv[]) { int valor = 0; valor = Menu_Principal(); printf("\r\n\r\nSe selecciono la opcion %d del Menu Principal", valor); printf("\r\nEl programa ha terminado"); getch(); //Esperamos pulsacion de tecla para terminar y cerrar ventana de consola exit(0); } int Menu_Principal(void) { char opcion = ' '; INICIO_MENU: textattr(2); clrscr(); gotoxy(10,8); cprintf(" oOo[ MENU PRINCIPAL ]oOo "); gotoxy(10,10); cprintf("[1].- ALTAS"); gotoxy(10,11); cprintf("[2].- BAJAS"); gotoxy(10,12); cprintf("[3].- MODIFICACIONES"); gotoxy(10,13); cprintf(""); gotoxy(10,14); cprintf("[0].- SALIR"); gotoxy(10,16); cprintf("INTRODUCE OPCION: "); opcion = getch(); //ten en cuenta que si tomamos con getch solo podemos coger 1 caracter // o sea numeros de 0 al 9 y algun caracter del Abecedario if(opcion == '1') { //Llamamos a funcion que corresponda return(1); } else if(opcion == '2') { //Llamamos a funcion que corresponda return(2); } else if(opcion == '3') { //Llamamos a funcion que corresponda return(3); } else if(opcion == '0') { return(0); } else { gotoxy(10,16); cprintf("OPCION NO VALIDA - Pulse una tecla para continuar..."); getch(); goto INICIO_MENU; } } |
#4
|
|||
|
|||
Lo pasé un poco a C++.
![]() Siempre me dice programa terminado. Código modificado un poco. Código:
#include <iostream> #include <windows.h> // Para mostrar texto en el título de la ventana. #include <stdio.h> // Cambio color de fondo y letras. #include <tchar.h> #include <stdio.h> #include <conio.h> using namespace std; //using std::cout; //using std::cin; // Función posición del cursor. void gotoxy(int ancho_x, int alto_y) { HANDLE hcon; hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos{}; dwPos.X = ancho_x; dwPos.Y = alto_y; SetConsoleCursorPosition(hcon, dwPos); } int Menu_Principal(void); int _tmain(int argc, _TCHAR* argv[]) { int valor = 0; valor = Menu_Principal(); cout << "\r\n\r\nSe selecciono la opcion %d del Menu Principal", valor; cout << "\r\nEl programa ha terminado"; //getch(); //Esperamos pulsacion de tecla para terminar y cerrar ventana de consola exit(0); } int Menu_Principal(void) { #pragma region "Configuración ventana." // Mostrar caracteres correctamente en pantalla y título de la ventana. SetConsoleOutputCP(65001); wchar_t titulo[128]; MultiByteToWideChar(CP_UTF8, 0, "Título de la ventana", -1, titulo, 128); SetConsoleTitleW(titulo); // Tamaño de la pantalla. Se cambia en los dos últimos dígitos. SMALL_RECT r = { 0, 0, 80, 20 }; // X = 80, Y = 20. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r); // Cambio color de 6 (amarillo / naranja), color letras 0 (negro). system("color 60"); // Ocultar cursor. CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); cci.bVisible = 0; // 0 oculta. 1 muestra cursor. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); #pragma endregion char opcion = ' '; INICIO_MENU: //textattr(2); //clrscr(); gotoxy(10, 8); cout << " oOo[ MENU PRINCIPAL ]oOo "; gotoxy(10, 10); cout << "[1].- ALTAS"; gotoxy(10, 11); cout << "[2].- BAJAS"; gotoxy(10, 12); cout << "[3].- MODIFICACIONES"; gotoxy(10, 13); cout << ""; gotoxy(10, 14); cout << "[0].- SALIR"; gotoxy(10, 16); cout << "INTRODUCE OPCION: "; //opcion = getch(); //ten en cuenta que si tomamos con getch solo podemos coger 1 caracter // o sea numeros de 0 al 9 y algun caracter del Abecedario cin >> opcion; if (opcion == '1') { //Llamamos a funcion que corresponda return(1); } else if (opcion == '2') { //Llamamos a funcion que corresponda return(2); } else if (opcion == '3') { //Llamamos a funcion que corresponda return(3); } else if (opcion == '0') { return(0); } else { gotoxy(10, 16); cout << "OPCION NO VALIDA - Pulse una tecla para continuar..."; //getch(); goto INICIO_MENU; } }
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
#5
|
|||
|
|||
bueno eso suelen decirlo porque puede "liar" mucho el codigo pero si queda claro para que lo usas y no induce a confusiones puedes usarlo que para algo esta en el lenguaje, si no, no estaria pero a mi la verdad que muchas veces me viene bien
claro que siempre puedes encerrar el menu en un bucle for( ;; ) y inducir la salida condicional con la opcion correspondiente con un break; |
#6
|
|||
|
|||
¿Será algo así por poner un ejemplo?
Código:
enum PAGINAS { terminar = 0, irMenuPrincipal = 1, irVolumen = 2, irBrillo = 3, irAltavoces = 4 } void main () {* * int dondeIr =i rMenuPrincipal; * * while(dondeIr != terminar) {* * * * switch(dondeIr) {* * * * * * case irMenuPrincipal: * * * * * * dondeIr = pantallaMenuPrincipal(); * * * * * * break; * * * * * *case irVolumen: * * * * * * * *dondeIr = pantallaVolumen(); * * * * * * * *break; * * * * * * case irBrillo: * * * * * * * *dondeIr = pantallaBrillo(); * * * * * * * *break; * * * * * case irAltavoces: * * * * * * * *dondeIr = pantallaAltavoces(); * * * * * * * *break; * * * * } * * } }
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
#7
|
|||
|
|||
se me antoja un poco raro estructurarlo asi
yo soy mas de poner algo como: Código:
switch(opcion) { case 1: // Menu principal Funcion_Menu_Principal(); break; case 2: // Menu Altas Funcion_Menu_Altas(); break; etc.. etc... } |
#8
|
|||
|
|||
Este está mejor, el que dices.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar Variables de Forma a Forma con delphi.net ASP | ASAPLTDA | .NET | 5 | 05-07-2007 20:51:31 |
Como Pasar Variables de Forma a Forma con delphi.net ASP | ASAPLTDA | Internet | 2 | 02-07-2007 16:26:41 |
como pasar a un stored procedure un conjunto de datos en FB 1.5 | pvizcay | Firebird e Interbase | 8 | 04-12-2006 04:44:09 |
Cual es la mejor forma de pasar datos de MSaccess a MySQL | ctronx | Conexión con bases de datos | 7 | 04-08-2004 01:04:53 |
Que forma es mejor ??? | chele | Conexión con bases de datos | 1 | 19-03-2004 15:36:13 |
![]() |
|