我会有一个方法,查看表或函数指针是否在表中。它是一个funktionpointer,应该调用方法。它是一个表,它应该再次调用Method并查看新表,如果它是funktionpointer或表。 我必须要有机会,它应该看起来充满活力。 输入(带scanf的控制台)。 表格层次结构。 我的表总是查找表。但结构和层次结构经常发生变化。
Parser解析了cmd1和cmd2中scanf的输入。在cmd1上你可以看到" //第一次输入" 。在cmd2上,您可以看到"第二个输入",因为cmd1是第一个,cmd2是第二个输入。我只想知道,我可以编写我的方法,任何使用我的struct的表都可以指向我的Method find。而Method在Table中找到了她的方法。因为每个Table都有另一个层次结构。第一个没有子表,另一个有6个子表,另外有9个子表有5个子表。
示例:
> 1-> 1a,1b,1c :
1a->2 : 2-> 2a,2b,2c -> 2a->MethodZZZ , 2b-> MethodQQ, 2c -> 2c1,2c2
1b->MethodXX :
1c-> 1c1,1c2,1c3
1c2-> MethodYY
typedef struct Table
{
char* command;
struct Table* subtab;
void (*pfnFunction)(char*);
char* description;
} findTable;
static void find(findTable* t , char* c)
{
int i = 0;
int countHIT = 0;
// parser is a method to parsed the input from scanf in cmd1 and cmd2
parser(cmd);
//cmd1 is the first input
if(cmd1 != NULL)
{
while(stricmp(t[i].command , "\0"))
{//tosearch is the first char in my look up tables
if(check_Cmd( t[i].tosearch , cmd1) == 1)
{
//cmd2 is the second input
if(cmd2 != NULL)
{
//when it has a subtab
if(t[i].subtab != NULL)
{
find(t[i].subtab , cmd2);
}
//when it has a funktionpointer
if(t[i].pfnFunction != NULL)
{
t[i].pfnFunction(cmd2);
}
}
else
{
printf("Error\n");
//Mehtod for a new input
Command();
}
//when the input isnt a funktionpointer or has a subtable, print the description
if(t[i].subtab == NULL && t[i].pfnFunction == NULL)
{
printf("Ausgabe: %s \n" , t[i].description);
}
countHIT = 1;
break;
}
i++;
}
if(countHIT == 0)
{
printf("Wrong input. \n");
Command();
}
}
else
{
printf("No input, please try again \n");
findInput();
}
}
static void findInput()
{
printf("Input: \n");
fgets(input, 256 , stdin);
input[strlen(input)-1] = '\0';
find(head, input);
//Head is the name of an Lookuptable
}
int main()
{
findInput();
return 0;
}