Fehler: "FILE" : Ungültige Verwendung dieses Typs als Ausdruck??



  • Hallo,

    ich find einfach keine Erklärung für folgenden Fehler. Hoffe, hier kann mir jemand helfen.

    MAX_DATEI und MAX_VARIABLEN sind definiert, eigene Strukturtypen (MINTERM, KOMPOSITION) wurden kreiert. Hier der fehlerbehaftete Ausschnitt des Programms:

    void daten_einlesen()
    {
    	int i,j;
    	int anzahl_variablen;
    	char dateiname[MAX_DATEI];
    	char temp_minterm[MAX_VARIABLEN];
    	char puffer;
    	MINTERM temp_MINTERM;
    	MINTERM *ptr_temp_MINTERM;
    	KOMPOSITION *temp_KOMP;
    
    	FILE *Datei;
    
    	printf("Bitte geben Sie den von Ihnen erstellten Dateinamen (maximal %i Zeichen) vollstaendig ein: ",MAX_DATEI);
    	scanf("%s",&dateiname);	
    	if(dateiname[MAX_DATEI]>MAX_DATEI)
    	{
    		printf("Dateiname zu lang. Bitte waehlen Sie einen anderen Namen.");
    	}
    	else
    	{
    		printf("Dateiname erfolgreich uebernommen.");
    	}
    
    	if((Datei = fopen(dateiname,"r")) == 0)
    	{
    		printf("\nDie Datei konnte nicht geoeffnet werden.");
    		exit(5);
    	}
    ....
    }
    

    Beim compilieren kommt u.a. folgende Fehlermeldung:
    "FILE" : Ungültige Verwendung dieses Typs als Ausdruck.
    'Datei' : nichtdeklarierter Bezeichner

    Eigentlich wird "Datei" doch mit "FILE" deklariert, warum funktioniert das hier nicht?

    mfg



  • stdio.h inkludiert?

    oder vielleicht irgendwelche markos die das zerschiessen? lass dir von deinem compiler mal den praeprozessten sourcecode ausgeben (noch vor der kompilierung) und schau nach ob da FILE oder ein andererbezeichner vielleicht dooferweise ersetzt wurde.



  • Da sind noch mehrere andere Fehler drin.

    scanf("%s",&dateiname); ändern in scanf("%s",dateiname);

    if(dateiname[MAX_DATEI]>MAX_DATEI) ändern in if(strlen(dateiname) > MAX_DATEI)

    ausserdem bringt der Ausdruck genau 0, denn scanf schert sich nicht um die Buffergrenze MAX_DATEI. Du musst schon beim Einlesen drauf aufpassen, dass der String <= MAX_DATEI ist. Nicht erst hinterher überprüfen. -> fgets(dateiname, MAX_DATEI, stdin);



  • Danke feigling!!

    stdio.h ist drin.
    Wahrscheinlich eine blöde Frage, aber wie komm ich an den praeprozessten Sourcecode?

    Mfg



  • Kody schrieb:

    Wahrscheinlich eine blöde Frage, aber wie komm ich an den praeprozessten Sourcecode?

    Compiler Doku lesen oder im Compiler Forum fragen 😉



  • Arbeite sonst mit MS Visual. Kann man das irgendwie "resetten"? Hab den ganzen Code gerade mal in "Dev-C++" reingeschmissen, der zeigt mir keine Fehler in diese Richtung an...


Anmelden zum Antworten