Zeiger auf Funktion

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
darkangel
Beiträge: 17
Registriert: Sa Jan 17, 2009 9:26 pm
Kontaktdaten:

Zeiger auf Funktion

Beitrag von darkangel » Mi Jun 24, 2009 6:31 pm

Hi
Ich suche momentan nach einer Möglichkeit, den Nutzer eines Programms durch Eingabe selbst bestimmen zu lassen, welche Funktion ausgeführt werden soll.
Jedoch habe ich keine Lust für jede, zur Verfügung stehende Funktion eine eigenes if zu setzen und die Eingabe mit den Funktionsnamen abzugleichen.

Ich dachte mir, ein pointer auf eine Funktion würde sich hierzu gut eignen, doch stehe ich nun leider vor einem Problem.

Da ich ja gerade erst bei dem Versuch bin, das Prinzip heraus zu finden, habe ich es einfach einmal so

Code: Alles auswählen


#include <stdio.h>

int test(int i)
{
	printf("%d",i);
	return 0;
}

int main() 
{
	int (*fct) (int a);
	char c[50];   
	fct=scanf("%s",c);
	(*fct)(1);
   

	return 0;
}
versucht.

Allerdings meldet mein Compiler dann : "Warnung: Zuweisung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung"
Bisher dachte ich, der Zeiger wäre bereits für Funktionen mit einem int-Rückgabewert geeignet.
Ich habe versucht es zu casten und habe die Zeile

Code: Alles auswählen

	fct=scanf("%s",c);
durch

Code: Alles auswählen

	fct=(int*)scanf("%s",c);
ersetzt, doch die nun wird mir gemeldet: "Warnung: Zuweisung von inkompatiblem Zeigertyp"

Könnte mir bitte jemand sagen, was genau ich falsch mache, oder mir einen anderen Ansatz vorstellen?

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Zeiger auf Funktion

Beitrag von Dirty Oerti » Mi Jun 24, 2009 6:45 pm

Um ehrlich zu sein hab ich keine Ahnung, ob das, was du da tust überhaupt funktionieren kann.
Mit dem, was ich so weiß, würde ich nein sagen.

Ich präsentiere: Ein anderer Ansatz ;)

Du könntest dir ein Array aus Funktionszeigern anlegen, dass du mit Zeigern auf deine Funktionen füllst.
Jetzt gibst du dem Benutzer eine Liste aller Funktionen aus (die musst du trotzdem selber schreiben...), der Benutzer gibt die NUMMER der jeweiligen Funktion (Achtung, traue niemals dem Benutzer!) ein.
Diese Nummer bekommst du, und dann müsstest du über dein Array recht einfach darauf zugreifen können.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zeiger auf Funktion

Beitrag von nufan » Mi Jun 24, 2009 7:26 pm

darkangel hat geschrieben:

Code: Alles auswählen

fct=scanf("%s",c);
scanf gibt die Anzahl der erfolgreich eingegebenen Elemente zurück, also ein int. Wenn das jetzt z.B. 3 sind hast du einen Pointer auf die Speicherstelle 3... Mal von den üblichen scanf-Problemen abgesehen.

Du versuchst doch den den Namen der Funktion einzugeben, oder? In Skriptsprachen geht das vielleicht, in C bzw. C++ hab ich so was noch nie gesehen. Ausgenommen du erstellst für jede Funktion eine Abfrage mit strcmp (). Am besten ist natürlich die von Dirty Oerti vorgeschlagene Array-Version. Weise jedem Arrayelement eine Funktion zu und lass den Benutzer den Index eingeben, dann brauchst du grade mal ein if um zu prüfen ob ein gültiger Index eingegeben wurde.

Antworten