在C中查找表动态搜索functionpointer或subtable

时间:2015-07-23 07:36:46

标签: c function-pointers lookup-tables

我会有一个方法,查看表或函数指针是否在表中。它是一个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;
    }

0 个答案:

没有答案