2 Quelltexte verknüfen/Funktion aufrufen
-
Hallo!
Noch ein Problem:
Ich habe eine main.c und eine Funktionen.c.
In der Funktionen.c deklariere und definiere ich die Funktionen, die ich in der main aufrufen will.
Nur es klappt einfach irgendwie nicht.MAIN.C
Interessant sidn eigtl nur die erstne Zeilen, der rest ist noch das Grundgerüst.
#include <stdio.h> #include <stdlib.h> #include "Funktionen.c" int main() { void Oeffnen(); int auswahl; printf("+-------------------------------+\n"); printf("| Hauptmenu |\n"); printf("+-------------------------------+\n"); printf("| 1 Dateneingabe |\n"); printf("| 2 Tabellarische Datenausgabe |\n"); printf("| 3 Datei |\n"); printf("| 4 Programmende |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : { printf("+-------------------------------+\n"); printf("| Dateneingabe |\n"); printf("+-------------------------------+\n"); printf("| 1 Neuer Mitarbeiter |\n"); printf("| 2 Stundeneingabe |\n"); printf("| 3 Mitarbeiter loschen |\n"); printf("| 4 zuruck zum Hauptmenu |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : { break; } case 2 : printf("Tabellarische Datenausgabe"); break; case 3 : printf("Datei"); break; case 4 : main(); } break; } case 2 : { printf("+-------------------------------+\n"); printf("| Tabellarische Datenausgabe |\n"); printf("+-------------------------------+\n"); printf("| 1 alle Mitarbeiter |\n"); printf("| 2 einzelne Mitarbeiter |\n"); printf("| 3 zuruck zum Hauptmenu |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : ; case 2 : printf("Tabellarische Datenausgabe"); break; case 3 : main(); } break; } case 3 : { printf("+-------------------------------+\n"); printf("| Datei |\n"); printf("+-------------------------------+\n"); printf("| 1 Speichern |\n"); printf("| 2 Laden |\n"); printf("| 3 zuruck zum Hauptmenu |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : ; case 2 : printf("Tabellarische Datenausgabe"); break; case 3 : main(); } break; } case 4 : return(0); } return(0); }
Funktionen.c
void Oeffnen(); void Oeffnen() { FILE *datei; datei = fopen("Database.txt", "r"); if (datei==NULL) { printf("Fehler beim Oeffnen der Datei"); } else { printf("Datei erfolgreich geöfnet"); } fclose(datei); }
Wenn ich den Inhalt der Funktionen.c direkt in die main packe klappt es, nur wenn es in einem anderen Quelltext liegt geht es nicht.
Was mache ich verkehrt?
LG
-
vielleicht erklärst du mal den Begrif "es geht nicht", denn wir können leider nicht hellsehen.
-
Ohhh.. Sorry. Da hast du recht.
Also das was in der Funktionen.c steht wird einfach ignoriert.
Egal ab die Datei Database.txt existiert oder nicht.. die Funktion wird einfach übergangen.Lg
-
das 'es wird einfach übergangen' fällt mir schwer zu glauben, aber einen kleinen Fehler gibt es dennoch: ein Funktionaufruf muss nur mit dem Namen und ihren Parametern erfolgen. Was du auf Zeile 7 in main.c geschrieben hast, ist die Deklaration der Funktion
Oeffnen
und nicht deren Aufruf.#include <stdio.h> #include <stdlib.h> #include "Funktionen.c" int main() { Oeffnen(); /* ohne void oder sonst was, du rufst ja nicht int printf("das ist ein String\n"); sondern printf("das ist ein String\n"); auf. */ ...
Außerdem entgeht es mir den Sinn der deiner Funktion
-
supertux schrieb:
das 'es wird einfach übergangen' fällt mir schwer zu glauben, aber einen kleinen Fehler gibt es dennoch: ein Funktionaufruf muss nur mit dem Namen und ihren Parametern erfolgen. Was du auf Zeile 7 in main.c geschrieben hast, ist die Deklaration der Funktion
Oeffnen
und nicht deren Aufruf.#include <stdio.h> #include <stdlib.h> #include "Funktionen.c" int main() { Oeffnen(); /* ohne void oder sonst was, du rufst ja nicht int printf("das ist ein String\n"); sondern printf("das ist ein String\n"); auf. */ ...
Außerdem entgeht es mir den Sinn der deiner Funktion
Die Funktion ist nur ein Test wie ich das mit mit den 2 Quelldateien machen muss, wo ich was deklarieren, definieren muss. Absolut sinnfrei die Funktion
Ich hab bissl herrumgespiel inzwischen und noch ne Header hinzugefügt.Den Fehler den du angesprochen hast hab ich natürlich wieder gemacht, jetzt weis ich woran es liegt! Danke dir vielmals!
LG
-
Bobblz schrieb:
Den Fehler den du angesprochen hast hab ich natürlich wieder gemacht
wieder gemacht
? lieber ihn nicht mehr machen
-
supertux schrieb:
Bobblz schrieb:
Den Fehler den du angesprochen hast hab ich natürlich wieder gemacht
wieder gemacht
? lieber ihn nicht mehr machen
hehe.. ich habe als ich ihn wieder gemacht habe deine lösung noch nicht gesehen
Jetzt hats sich ins hirn eingebrannt
-
Ich glaube ich werde bekloppt..
Jetzt sagt mir der Compiler:|35|undefined reference to `_neuermitarbeiter'|
Header#ifndef FUNKTIONEN_H_INCLUDED #define FUNKTIONEN_H_INCLUDED #include <stdio.h> #include <stdlib.h> typedef struct { char Name[20]; char Vorname[20]; float stunden; float stundenlohn; } DATENBANK; void neuermitarbeiter(); #endif // FUNKTIONEN_H_INCLUDED
MAIN
#include "Funktionen.h" int main() { int auswahl; printf("+-------------------------------+\n"); printf("| Hauptmenu |\n"); printf("+-------------------------------+\n"); printf("| 1 Dateneingabe |\n"); printf("| 2 Tabellarische Datenausgabe |\n"); printf("| 3 Datei |\n"); printf("| 4 Programmende |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : { printf("+-------------------------------+\n"); printf("| Dateneingabe |\n"); printf("+-------------------------------+\n"); printf("| 1 Neuer Mitarbeiter |\n"); printf("| 2 Stundeneingabe |\n"); printf("| 3 Mitarbeiter loschen |\n"); printf("| 4 zuruck zum Hauptmenu |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : neuermitarbeiter(); case 2 : printf("Tabellarische Datenausgabe"); break; case 3 : printf("Datei"); break; case 4 : main(); } break; } case 2 : { printf("+-------------------------------+\n"); printf("| Tabellarische Datenausgabe |\n"); printf("+-------------------------------+\n"); printf("| 1 alle Mitarbeiter |\n"); printf("| 2 einzelne Mitarbeiter |\n"); printf("| 3 zuruck zum Hauptmenu |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : ; case 2 : printf("Tabellarische Datenausgabe"); break; case 3 : main(); } break; } case 3 : { printf("+-------------------------------+\n"); printf("| Datei |\n"); printf("+-------------------------------+\n"); printf("| 1 Speichern |\n"); printf("| 2 Laden |\n"); printf("| 3 zuruck zum Hauptmenu |\n"); printf("+-------------------------------+\n\n"); printf("Auswahl: "); scanf("%i",&auswahl); switch (auswahl) { case 1 : ; case 2 : printf("Tabellarische Datenausgabe"); break; case 3 : main(); } break; } case 4 : return(0); } return(0); }
Funktionen.c
#include "Funktionen.h" void neuermitarbeiter() { getchar(); DATENBANK NEU; char c; int i=0; printf("Geben Die den Nachnamen ein: "); while ((c=getchar()) !='\n') { NEU.Name[i++]=c; } NEU.Name[i]='\0'; i=0; printf("Geben Die den Vornamen ein: "); while ((c=getchar()) !='\n') { NEU.Vorname[i++]=c; } NEU.Vorname[i]='\0'; puts(NEU.Name); puts(NEU.Vorname); getchar(); main(); }
Hab das ganze eigentlich mehrfach durchgesehen udn sehe da einfach keinen Fehler! Es muss irgendwo beim zusammenfügen nen Fehler geben. Der Funktionsdummy an sich funktioniert.
Lg