Programmaufruf über einen String ???



  • Willst du nun eine FUNKTION aufrufen oder ein PROGRAMM? Einmal redest du davon, dann wieder davon. Wie das mit dem Programm geht steht doch schon oben.



  • ich gebe mal ambesten ein Bsp.
    _____________________________________________________________
    #include <stdio.h>

    int max(char* zahlen); //Funktion wandelt String in int zahlen und bestimmt max wert
    int min(char* zahlen); //Funktion wandelt String in int zahlen und bestimmt min wert

    void main()
    {
    char funktionsname[30];
    char zahl[10];
    FILE* datei;
    datei=fopen("test.txt","r");
    fscanf(datei,"%s %s",funktionsname,zahl);
    }
    _____________________________________________________

    Die datei test.txt sieht z.b so aus:

    max 12356
    max 44566779
    min 3479

    und ich will jetzt das eben je nach erstem string in der Text datei entweder die funktion max oder die Funktion min aufgerufen wird. und man mit einer for schleife eben die gesammte datei abarbeiten kann, und das quasi jedesmal individuell durch die text datei die entsprechen anzuwendende Funktion angebeben wird.



  • So direkt geht das nicht. Du musst irgendwo etwas festlegen dass du den string "max" mit der funktion max() assoziieren kannst, ich würde das über ein Strukturarray aus Funktionspointern und char* machen. Dann nach dem einlesen des Strings linear durch das Array suchen und sobald man die passende Funktion hat diese ausführen.



  • kurz: Du musst abfragen, was eingegeben wurde und daran entscheiden, welche Funktion du aufruft.

    Außerdem ist da wohl noch viel lernen bei dir nötig, auf so eine Idee wie du sie im Kopf hattest kann man nur kommen, wenn man noch nichts verstanden hat.



  • für mich hört sich das nach ner simplen einlese, vergleiche, aufrufe aufgabe an.
    "max" oder "min" einlesen + zahl einlesen und jenachdem, was strcmp liefert max() oder min() aufrufen.



  • @ mahlzeit:

    Was heißt bitte die Idee die ich im Kopf hatte. 😡

    Diese Idee habe ich weiterhin im Kopf. Ich bin schließlich
    nur auf der suche nach einer möglichkeit eine große anzahl von unterschiedlichen Funktionsaufrufen
    über eine individuelle Textdatei zu steuern.



  • curry-king schrieb:

    für mich hört sich das nach ner simplen einlese, vergleiche, aufrufe aufgabe an.
    "max" oder "min" einlesen + zahl einlesen und jenachdem, was strcmp liefert max() oder min() aufrufen.

    Das klingt glaube ich ganz gut. Da hätte ich aber eigentlich auch selbst draufkommen müssen. 😕

    Werde das ganze mal in die tat umsetzten und schauen ob es so funktioniert wie ich mir das vorstelle.
    Danke für die tipps



  • FireFlow schrieb:

    Return Value

    If command is a NULL pointer, system returns nonzero if a command processor is available.

    If command is not a NULL pointer, system returns 0 if the command processor was successfully started.

    If an error occurred, a -1 is returned and errno is set to one of the following:

    ENOENT Path or file function not found
    ENOEXEC Exec format error
    ENOMEM Not enough memory

    😃

    Ich quote hier mal den Standard, das sollte Aufklärung schaffen;

    If the argument is a null pointer, the system function returns nonzero only if a command processor is available. If the argument is not a null pointer, and the system function does return, it returns an implementation-defined value.

    Stichwort "implementation-defined"...



  • Um funktionalitäten in einem Programm aus einer Datei auftzurufen versuchs mal mit folgendem:

    int fkt_max(char *argument);
    {
    // Bearbeiten der Argumente
    // Ausführen der Operation
    .....
    }
    
    typedef struct
    {
       const char *kwd;        /* Speicher für Funktionsnamen */
       int (*action)(char *);  /* function to be executed */
    } DFunKey;
    
    DFunkey funktions[]={
        {"MAX",fkt_max},
        {"MIN",fkt_min},
        {"",NULL},
    };
    int AnzElem=(sizeof(funktions)/sizeof(DFunKey));
    

    in deiner Auswerte Routine
    -liest du mit fgets eine Zeile,
    -trennst den Funktionsnamen ab
    -entfernst davon alle whitespace Characters
    -durchsuchst linear mit strcmpi das feld funktions
    -im Trefferfall rufst du die Funktion auf
    -falls das Kommando im Feld nicht vorkommt rufts du eine Fehlerroutine auf

    Willst du es intelligenter machen sortiert du das feld mit den zulässigen
    Namen linear aufsteigend und machst dann eine Newton Suche daruf, diese
    Braucht im Mitt für 2^n Einträge n Zugriffe im Gegensatz zum linearen Search
    mit n/2 Zugriffe bei n Elementen.

    Viel Spaß.



  • kruemel-monster schrieb:

    @ mahlzeit:

    Was heißt bitte die Idee die ich im Kopf hatte. 😡

    So wie du es verwirklichen wolltest meinte ich. Das war nunmal totaler Käse.


Anmelden zum Antworten