Оптимизационные вопросы по коду
Делаю программу с привлечением отдельных модулей, вычисляющих конкретные задачи. Столкнулся с тем, что конструкция типа switch case довольно большая, хоть и для меня понятна. Каким образом можно элегантно подсократить объем главного файла и нужно ли вообще это? Не хотелось бы также запутаться в бесконечном потоке функций и их вызовом, и так по условию их будет достаточно. Я начинающий от слова совсем.
array.cpp
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int *get_array(int *a, int size) //функция получения
{
a = (int*)malloc(size * sizeof(int));
for (int i = 0; i<size; i++)
{
printf("a[%i] = ", i);
scanf_s("%i", &a[i]);
}
return a;
}
void print_array(int *a, int size) //функция печати
{
for (int i = 0; i<size; i++)
{
printf("a[%i] = %d\n", i, a[i]);
}
}
main.cpp
#include <stdio.h>
#include <conio.h>
#include <clocale>
#include <stdlib.h>
int *get_array(int *a, int size);
void print_array(int *a, int size);
int main()
{ //setlocale (LC_ALL,"Russian");
setlocale (0, "");
int deystvie;
int deystvie1;
int deystvie2;
int deystvie3;
printf ("----------Меню----------: \n");
printf ("1 - Обработка массива.\n");
printf ("2 - Обработка матриц.\n");
printf ("3 - Задача с использованием геометрических данных.\n");
printf ("Выберите действие:\n ");
scanf("%i",&deystvie);
switch (deystvie)
{ case 1 :
{ printf("-----Обработка массива-----\n ");
printf("Выберите нужное действие1:\n ");
printf("1.Ввод исходных данных с консоли1 \n ");
printf("2.Ввод исходных данных с файла1\n ");
printf("3.Задание массива случайным образом1\n ");
scanf("%i",&deystvie1);
switch(deystvie1)
{
case 1:
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**
printf("-------Введите данные с консоли-------");
// вызываемый прототип функции ввода и обработки данных с консоли
int *a;//
int n = 0;
printf("Введите размерность массива: ");
scanf("%i", &n);
a = get_array(a, n);
print_array(a, n);
free(a);
break;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**
case 2:
printf("-------Введите данные с файла, расположенного в (путь)-------");
// вызываемый прототип функции ввода и обработки данных с файла
break;
case 3:
printf("-------Массив генерируется...)-------");
// вызываемый прототип функции генерации и обработки данных
break;
default:
break;
}
}
break;
case 2 :
{ printf("-----Обработка матрицы-----\n ");
printf("Выберите нужное действие2:\n ");
printf("1.Ввод исходных данных с консоли2 \n ");
printf("2.Ввод исходных данных с файла2\n ");
printf("3.Задание матрицы случайным образом2\n ");
scanf("%i",&deystvie2);
switch(deystvie2)
{ case 1:
printf("-------Введите данные с консоли-------");
// вызываемый прототип функции ввода и обработки данных с консоли
break;
case 2:
printf("-------Введите данные с файла, расположенного в (путь)-------");
// вызываемый прототип функции ввода и обработки данных с файла
break;
case 3:
printf("-------Массив генерируется...)-------");
// вызываемый прототип функции генерации и обработки данных
break;
default:
break;
}
}
break;
case 3 :
{ printf("-----Обработка геометрического3-----\n ");
printf("Выберите нужное действие3:\n ");
printf("1.Ввод исходных данных с консоли3 \n ");
printf("2.Ввод исходных данных с файла3\n ");
printf("3.Задание массива случайным образом3\n ");
scanf("%i",&deystvie3);
{
switch(deystvie3)
{ case 1:
printf("-------Введите данные с консоли-------");
// вызываемый прототип функции ввода и обработки данных с консоли
break;
case 2:
printf("-------Введите данные с файла, расположенного в (путь)-------");
// вызываемый прототип функции ввода и обработки данных с файла
break;
case 3:
printf("-------Массив генерируется...)-------");
// вызываемый прототип функции генерации и обработки данных
break;
default:
break;
}
}
break;
default:
printf("Выбрано неправильное значение.\n");
break;
}
}
getch();
return 0;
}
Ответы (2 шт):
В целом желательно чтобы уровень вложенности не превышал 6; Если по объективным причинам этого добиться нельзя, нужно сократить объем текста внутри каждого case до читабельного минимума. Проще говоря, все что внутри (каждого)case оформить в виде отдельной функции возвращающей значение (успешно/возврат назад)
Используй функцию Free()
Функция Free() функция управления памятью, предназначенная для освобождения ранее выделенной динамичной памяти, для дальнейшего выполнения программы.