1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Brauche bitte Hilfe beim erstellen einer Funktion

  • flo2020
  • 13. Februar 2011 um 17:32
  • Unerledigt
  • flo2020
    2
    flo2020
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 13. Februar 2011 um 17:32
    • #1

    Hallo Leute,
    Ich habe eine ganz bestimmte Frage und hoffe ihr könnt mir weiterhelfen:
    Ich habe ein Wörterbuch programmiert wobei das nicht weiter wichtig ist was ich programmiert habe, sondern ich möchte das jetzt etwas verschönern und zwar mit Funktionen. Nur scheitere ich bei diesem leider. Ich hoffe ihr könnt mir weiterhelfen.

    Das Programm funktioniert mit meinem Compiler so wie es geschrieben ist, nur wenn ich es auf Funktionen ändern möchte nicht. Ich poste nicht das ganze Programm, sondern nur den Abschnitt, welchen ich behandeln möchte. (In diesem Abschnitt geht es eigentlich nur darum, alle Wörter, welche in einem anderen Abschnitt des Programms eingetragen worden sind, wieder auszugeben und zwar, entweder auf deutsch oder english.)
    Ich weiss es schaut nach etwas zu viel Code für ein Forum aus aber mir geht es im Grunde genommen ausschließlich um die Parameter und die zu übergebenen Argumente bezogen auf die Funktion. Wenn ich das GANZE Programm so aufrufe überspringt es mir diesen Teil und wird nicht ausgeführt. Ich hoffe ihr könnt mir weiterhelfen und danke im voraus.

    So sieht meine derzeitige Struktur aus:

    Code
    struct leo 
    { 
        char *deutsch; 
        char *english; 
    }*buch;



    So hatte ich den zu behandelnden Abschnitt anfangs:

    Code
    if(choice==3) 
        { 
            printf("Language(1 = Deutsch, 2 = English)"); scanf("%d", &which_language); 
     
            if(which_language==1) 
            { 
                for(i=0;i<eintraege;i++) 
                { 
                    if(buch[i].deutsch != "--") 
                    { 
                        printf("%s, ", buch[i].deutsch); 
                    } 
                } 
            } 
     
            if(which_language==2) 
            { 
                for(i=0;i<eintraege;i++) 
                { 
                    if(buch[i].english != "--") 
                    { 
                        printf("%s, ", buch[i].english); 
                    } 
                } 
            } 
        }
    Alles anzeigen



    Und so dachte ich mir könnte ich es umschreiben:

    Code
    void look_word(struct leo *x, int entry ,int langu) 
    { 
        int i=0; 
     
            printf("Language(1 = Deutsch, 2 = English)"); scanf("%d", &langu); 
     
            if(langu==1) 
            { 
                for(i=0;i<entry ;i++) 
                { 
                    if(x[i].deutsch != "--") 
                    { 
                        printf("%s, ", x[i].deutsch); 
                    } 
                } 
            } 
     
            if(langu==2) 
            { 
                for(i=0;i<entry ;i++) 
                { 
                    if(x[i].english != "--") 
                    { 
                        printf("%s, ", x[i].english); 
                    } 
                } 
            } 
    }
    Alles anzeigen

    Einmal editiert, zuletzt von flo2020 (13. Februar 2011 um 17:35)

  • Dimitrij
    7
    Dimitrij
    Mitglied
    Reaktionen
    12
    Punkte
    437
    Beiträge
    73
    • 13. Februar 2011 um 17:57
    • #2

    in C vergleicht man Zeichenketten nicht mit !=, sondern mit strcmp

    de.lernu.net, lingwadeplaneta.info

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 13. Februar 2011 um 18:04
    • #3
    Zitat von flo2020

    Wenn ich das GANZE Programm so aufrufe überspringt es mir diesen Teil und wird nicht ausgeführt.

    Welchen Teil überpringt er? Die Funktion look_word? Hast du sie in der Funktion main() auch aufgerufen?

    Da wo vorher der Codeabschnitt stand, da gehört jetzt ein Funktionsaufruf hin:

    Code
    look_word(buch, eintraege, which_language);

    Du müsstest dich allerdings zuerst festlegen was genau deine Funktion alles machen soll. Man "verschönert" Programme normalerweise nicht, wenn man willkürlich Code in Funktionen packt, sondern man sollte sich überlegen was die Ein- und Ausgabewerte der Funktion sein sollen und was dazwischen passiert.

    In deinem Fall ist es z.B. unlogisch, dass hier "langu" übergeben wird, du aber trotzdem in der Funktion diesen Parameter einliest. Entweder du liest vor dem Aufruf ein, und übergibst den Wert, oder die Funktion liest selber ein. Aber beides zusammen verwirrt eher.

  • flo2020
    2
    flo2020
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 13. Februar 2011 um 18:04
    • #4

    @ Dimitrij. Ja das weiss ich schon. Das habe ich in einem anderen Abschnitt behandelt, in welchem Einträge gelöscht werden sollen. Und die Einträge, die gelöscht sind habe ich mit "--" inistialisiert. Mir geht es wirklich nur um die Parameter.

  • flo2020
    2
    flo2020
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 13. Februar 2011 um 18:21
    • #5

    Danke für die schnellen Antworten. Also bei mir schaut das nun so aus. Der Fehler ist, das es jeden einzelnen Abschnitt normal ausführt, außer den Teil, den ich in eine Funktion verpackt habe. Das ganze läuft in einer While(1). (ich möchte nicht wirklich das Programm verschönern, ich muss nur etwas üben mit Funktionen zu arbeiten.)

    Im menü von dem ganzen wörter buch steht was aber nicht weiter wichtig sein sollte für die Fehlerbehebung:

    Code
    printf("1... Add word\n");
        printf("2... Look up word\n");
        printf("3... List all words of a language\n");
        printf("4... Delete word\n");
        printf("5... Exit\n\n");



    Das ist meine umgeänderte Funktion:

    Code
    void list_all_words_deutsch(struct leo *x, int entry) //Funktionsname nicht look_up_word!!
    {
        int i=0;
        for(i=0;i<entry ;i++)
        {
            if(x[i].deutsch != "--")
            {
                printf("%s, ", x[i].deutsch);
            }
        }
    }
    void list_all_words_english(struct leo *x, int entry)
    {
        int i=0;
        for(i=0;i<entry ;i++)
        {
            if(x[i].english != "--")
            {
                printf("%s, ", x[i].english);
            }
        }
    }
    Alles anzeigen



    Und so wird sie in der main aufgerufen:

    Code
    if(choice==3)
        {
                printf("Language(1 = Deutsch, 2 = English)"); scanf("%d", &which_language);
                if(which_language==1)
                {
                    list_all_words_deutsch(buch, eintraege);
                }
                if(which_language==2)
                {
                    list_all_words_english(buch, eintraege);
                }
        }
    Alles anzeigen

    Einmal editiert, zuletzt von flo2020 (13. Februar 2011 um 18:47)

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 13. Februar 2011 um 20:11
    • #6

    Es müsste eigentlich so passen.

    Bist du sicher, dass er zwar den If-Block, nicht aber die Funktion ausführt? Siehst du das in der Ausgabe oder springt nur der Debugger nicht in die Funktion? Beim Debuggen gibt es die Kommandos "step into" und "step over". Letzteres führt Unterfunktionen in einem Schritt aus. Vielleicht ist das ja das Problem.

  • flo2020
    2
    flo2020
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 13. Februar 2011 um 20:46
    • #7

    ok jetzt stimmt es mit den Übergaben. Hab Das programm nochmal neu gestartet. Jetzt funktioniert es komischerweise. Danke für alle Antworten !! und für die Hilfe !!

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung