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


Anmelden zum Antworten