El siguiente post muestra fragmentos de código en C que seguido son utilizados en los programas pedidos de Tareas en las escuelas.
Plantilla de un Menu de opciones usando do-while + switch
Descargar Menu_do_while_switch.c (http://bit.ly/2OWAqtf)
/*
Twitter: @albertobsd
email: alberto.bsd@gmail.com
Buscame tambien en:
web: https://programaciontrabajosescolares.blogspot.com/
e-mail: ProgramacionTrabajosEscolares@gmail.com
facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
*/
#include<stdio.h>
#include<stdlib.h>
int main() {
int opcion;
int entrar =1;
char temp[10];
do {
printf("1) Opcion 1\n");
printf("2) Opcion 2\n");
printf("3) Opcion 3\n");
printf("4) Salir\n");
do{
printf("Ingrese una opcion");
fgets(temp,10,stdin);
opcion = strtol(temp,NULL,10);
}while(opcion < 0);
switch(opcion) {
case 1:
printf("Usted selecciono %i\n",opcion);
break;
case 2:
printf("Usted selecciono %i\n",opcion);
break;
case 3:
printf("Usted selecciono %i\n",opcion);
break;
case 4:
printf("Usted selecciono %i\n",opcion);
entrar = 0;
break;
default:
printf("Opcion incorrecta - Mensaje de Error\n");
break;
}
}while(entrar == 1); //Se puede dejar como "}while(entrar);"
return 0;
}
Fuente: Plantilla de para Capturar Datos y Mostrarlos (https://albertobsd.blogspot.com/2018/11/plantilla-de-para-capturar-datos-y.html)
Plantilla de para Capturar Datos y Mostrarlos
Usando estructura de datos y memoria dinámica para los datos almacenados.
Descarga plantilla_capturar_mostrar_datos.c (http://bit.ly/2FykbmA)
/*
Twitter: @albertobsd
email: alberto.bsd@gmail.com
Buscame tambien en:
web: https://programaciontrabajosescolares.blogspot.com/
e-mail: ProgramacionTrabajosEscolares@gmail.com
facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
*/
#include<stdio.h> //Funciones printf, fgets
#include<stdlib.h> //realloc
#include<string.h> //strcspn
#include<ctype.h> //tolower
#define MAX_LEN_ALFANUMERICA_1 100
#define MAX_LEN_ALFANUMERICA_2 50
#define MAX_LEN_ALFANUMERICA_3 20
typedef struct plantilla_struct {
char variable_alfanumerica_1[MAX_LEN_ALFANUMERICA_1];
char variable_alfanumerica_2[MAX_LEN_ALFANUMERICA_2];
char variable_alfanumerica_3[MAX_LEN_ALFANUMERICA_3];
int variable_entera_1;
int variable_entera_2;
int variable_entera_3;
float variable_flotante_1;
}TIPO;
int funcion_ingreso_de_datos();
int funcion_imprimir_datos();
TIPO *tipos = NULL;
int contador_tipos = 0;
int main() {
int opcion;
int entrar =1;
char temp[10];
do {
printf("1) funcion_ingreso_de_datos\n");
printf("2) funcion_imprimir_datos\n");
printf("3) Salir\n");
do{
printf("Ingrese una opcion: ");
fgets(temp,10,stdin);
opcion = strtol(temp,NULL,10);
}while(opcion <= 0); //Mientras sea menor o igual que 0
switch(opcion) {
case 1:
printf("Usted selecciono %i\n",opcion);
funcion_ingreso_de_datos();
break;
case 2:
printf("Usted selecciono %i\n",opcion);
funcion_imprimir_datos();
break;
case 3:
printf("Usted selecciono %i\n",opcion);
entrar = 0;
break;
default:
printf("Opcion incorrecta - Mensaje de Error\n");
break;
}
}while(entrar == 1); //Se puede dejar como "}while(entrar);"
return 0;
}
int funcion_ingreso_de_datos() {
int opcion;
int entrar =1,entrar_opcion_si_no;
char temp[10];
do {
tipos = realloc(tipos,(contador_tipos+1)*sizeof(struct plantilla_struct)); //Incrementamos el espacio para 1 Variable TIPO mas en el arreglo
//Capturamos variable_alfanumerica_1
printf("Capture variable_alfanumerica_1: ");
fgets(tipos[contador_tipos].variable_alfanumerica_1,MAX_LEN_ALFANUMERICA_1,stdin);
tipos[contador_tipos].variable_alfanumerica_1[strcspn(tipos[contador_tipos].variable_alfanumerica_1,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
//Capturamos variable_alfanumerica_2
printf("Capture variable_alfanumerica_2: ");
fgets(tipos[contador_tipos].variable_alfanumerica_2,MAX_LEN_ALFANUMERICA_2,stdin);
tipos[contador_tipos].variable_alfanumerica_2[strcspn(tipos[contador_tipos].variable_alfanumerica_2,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
//Capturamos variable_alfanumerica_3
printf("Capture variable_alfanumerica_3: ");
fgets(tipos[contador_tipos].variable_alfanumerica_3,MAX_LEN_ALFANUMERICA_3,stdin);
tipos[contador_tipos].variable_alfanumerica_3[strcspn(tipos[contador_tipos].variable_alfanumerica_3,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
//Capturamos variable_entera_1
do {
printf("Capture variable_entera_1: (Solo mayores que 0) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_entera_1 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
}while(tipos[contador_tipos].variable_entera_1 <= 0); // Salimos del DO solo si el valore leido es mayor o igual a 1
//Capturamos variable_entera_2
do {
printf("Capture variable_entera_2: (Solo mayores o iguales que 0) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_entera_2 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
}while(tipos[contador_tipos].variable_entera_2 < 0); // Salimos del DO solo si el valore leido es mayor o igual a 0
//Capturamos variable_entera_3
do {
printf("Capture variable_entera_3: (Solo Negativos) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_entera_3 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
}while(tipos[contador_tipos].variable_entera_3 >= 0); // Salimos del DO solo si el valor leido es negativo
//Capturamos variable_flotante_1
do {
printf("Capture variable_flotante_1: (Solo distintos que 0) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_flotante_1 = strtof(temp,NULL);
}while(tipos[contador_tipos].variable_flotante_1 == 0.0); // Salimos del DO solo si el valor leido distinto de 0
entrar_opcion_si_no = 1;
do{
printf("Desea segir ingresando mas datos? (s/n)\n");
fgets(temp,10,stdin);
switch(tolower(temp[0])) {
case 's':
entrar_opcion_si_no = 0;
printf("Selecciono SI\n");
break;
case 'n':
entrar_opcion_si_no = 0;
printf("Selecciono NO\n");
entrar = 0; // Se cambia la variable para salir del menu principal
break;
default:
printf("opcion incorrecta, solo 's' o 'n'\n");
break;
}
opcion = strtol(temp,NULL,10);
}while(entrar_opcion_si_no == 1);
contador_tipos++; //Aqui incrementamos el contador_tipos que indica cuantos valores completos tenemos de la estructura plantilla_struct
}while(entrar == 1); //Se puede dejar como "}while(entrar);"
}
int funcion_imprimir_datos() { //Imprimir los datos no tiene mucho sentido, solo hay que recorrer correctamente la cantidad de registros previamente capturados
int i = 0;
while(i < contador_tipos) {
printf("Datos del registro %i\n",(i+1));
printf("variable_alfanumerica_1: %s\n",tipos[i].variable_alfanumerica_1);
printf("variable_alfanumerica_2: %s\n",tipos[i].variable_alfanumerica_2);
printf("variable_alfanumerica_3: %s\n",tipos[i].variable_alfanumerica_3);
printf("variable_entera_1: %i\n",tipos[i].variable_entera_1);
printf("variable_entera_2: %i\n",tipos[i].variable_entera_2);
printf("variable_entera_3: %i\n",tipos[i].variable_entera_3);
printf("variable_flotante_1: %f\n",tipos[i].variable_flotante_1);
printf("\n");//Enter adicional
i++;
}
}
- El primer do while tiene la condición mal.
- Los siguientes codigos repiten varias veces el mismo código con distintas variables. Sugiero refactorizar en vez de repetir el código como lo haces.
Cita de: CalgaryCorpus en 22 Noviembre 2018, 02:27 AM
- El primer do while tiene la condición mal.
Listo!
Cita de: CalgaryCorpus en 22 Noviembre 2018, 02:27 AM
- Los siguientes codigos repiten varias veces el mismo código con distintas variables. Sugiero refactorizar en vez de repetir el código como lo haces.
La plantilla va orientada a alguien que esta empezando con la programación. Y apenas esta aprendiendo conceptos básicos, si ya después el usuario que utilice la plantilla quiere refactorizar el código entonces sera cosa del usuario que utilice la plantilla.
Saludos