Просто для удовольствия, если вы хотите пока что-то усложнить, но облегчить свою жизнь, используя несколько таких сценариев, у меня есть решение, которое на первый взгляд выглядит очень некрасивым, но мне нравится, как оно работает в терминахмасштабируемости и повторного использования.
Приведенный ниже код работает в интерактивном режиме для целей тестирования, отбрасывая все, что вы считаете ненужным.
#include<stdio.h>
// Lets get handlers for each value
int f_One(void);
int f_Two(void);
int f_Three(void);
int f_Four(void);
// Lets have them in an enum rather than mere numbers, may not be required for you
typedef enum {
ONE = 1,
TWO,
THREE,
FOUR,
MAX_TASKS,
TASK_INVALID = -1,
} eValue_t ;
// This is a structure that binds an input and a handler together
typedef struct stTask {
eValue_t TaskID;
int (*handler) (void);
} stTask_t;
// Lets have an object
stTask_t Task;
// This is a like look-up table for referencing inputs and their handlers
const stTask_t TaskList[MAX_TASKS-1] =
{
{ ONE, f_One },
{ TWO, f_Two },
{ THREE, f_Three },
{ FOUR, f_Four },
};
// This is your data
int a, b, c, d;
// Handler for 1
int f_One(void)
{
printf("\nOne: ");
a = 10;
b = 100;
printf("a is %d, b is %d", a, b);
return 1;
}
// Handler for 2
int f_Two(void)
{
printf("\nTwo: ");
a = 10;
b = 50;
c = 100;
printf("a is %d, b is %d, c is %d", a, b, c);
return 2;
}
// Handler for 3
int f_Three(void)
{
printf("\nThree: ");
a = 0;
b = 25;
c = 50;
d = 100;
printf("a is %d, b is %d, c is %d, d is %d", a, b, c, d);
return 3;
}
// Handler for 4
int f_Four(void)
{
printf("\nFour: I didn't set any :D");
return 4;
}
int main (void)
{
int Val = -1;
int ret = 0;
while(1)
{
// Get input
printf("\n\nPress 1, 2, 3, 4 or 0 for exit, Enter a value: ");
scanf("%d", &Val);
// Some validation, can be improved, or discarded
if(Val > 4)
{
printf("\nInvalid input");
continue;
}
else if(Val == 0)
{
printf("\nExiting...");
break;
}
// Assign the task
Task.TaskID = Val-1;
// Load the handler
Task.handler = TaskList[Task.TaskID].handler;
// Execute the handler
ret = Task.handler();
// Do something with 'ret'
}
printf("\n\n");
return 0;
}