Aufgabe mit Pointer auf Funktion



  • Gewaltig!! 👍

    Danke für deine Hilfe Swordfish!

    😉 glg fath



  • Hast Du es auch verstanden?

    greetz, Swordfish



  • Nun ja, teilweise.

    Ein paar Sachen werde ich umschreiben müssen.

    Ich habe noch nicht herausgefunden, warum du den ! Operator benutzt (z.B. vor scanf oder radius)

    while( ( ( ch = getc( stdin ) ) != EOF ) && ( ch != '\n' ) ); Die Bedingung in dieser while Schleife ist auch noch nicht ganz klar für mich.

    Auch struct habe ich noch nicht kennen gelernt.

    Vielleicht hast du ja noch ein paar kurze Erklärungen? Sonst muss ich mich noch durch den Tutorials-Jungle kämpfen.

    Danke inzwischen!!

    lg fath



  • Die Funktion flush_stdin ist nur dazu da, ungültige Eingaben aus dem Puffer von stdin zu flushen. Man hätte auch schreiben können:

    void flush_stdin( void ) {
    
        int ch = 0;
    
        do {
    
            ch = getc( stdin );
    
       } while( ( ch != '\n' ) && ( ch != EOF ) );
    
       // oder: while( !( ( ch == '\n' ) || ( ch == EOF ) ) );
    }
    

    Es werden also Zeichen aus stdin gelesen (entfernt), solange (a) der stream nicht leer ist ( EOF ) und das Ende der Zeile ( '\n' ) nicht erreicht ist.

    Ich habe Funktionen und deren Namen in eine struct zusammengefasst. Du kannst sie natürlich auch getrennt lassen:

    // anstatt:
    
    struct function_switch_t {
    
        const char *name;
        double ( *function )( float );
    
    } function_switch[ ] = {
    
        { "Der Umfang",  get_outline  },
        { "Die Flaeche", get_area     }
    };
    
    // definierst du am beginn der main einfach:
    
    double ( *function_switch[ ] )( float ) = { get_outline, get_area };
    const char *name[ ] = { "Der Umfang", "Die Flaeche" };
    
    // und berechnest so:
    
    printf( "\n%s eines Kreises mit Radius %f ist %lf.\n",
        name[ choice - 1 ], radius, function_switch[ choice - 1 ]( radius ) );
    

    fath schrieb:

    Ich habe noch nicht herausgefunden, warum du den ! Operator benutzt (z.B. vor scanf oder radius)

    C nimmt 0 als false und alles andere als true an. Wenn jetzt in radius 0 steht (d.h. keine gültige Eingabe erfolgt ist), sag ich while( !radius ); . Du könntest auch while( radius != 0 ); schreiben.

    Ich hoffe, nun sind alle Klarheiten beseitigt 😉

    greetz, Swordfish



  • Swordfish schrieb:

    Die Funktion flush_stdin ist nur dazu da, ungültige Eingaben aus dem Puffer von stdin zu flushen.

    ja fein, aber 'flush' ist hier nur das falsche wort.
    🙂



  • Warum?

    greetz, Swordfish



  • im zusammenhang mit irgendwelchen buffern heisst flush soviel wie: 'alle gepufferten daten jetzt sofort an den empfänger senden'. die daten gehen dabei nicht verloren, sondern werden für die sofortige weiterverarbeitung aus dem buffer rausgeschoben. was du aber machst ist eher 'auslesen und wegwerfen'. hier wäre vielleicht 'clear' oder sowas das passendere wort.
    🙂



  • to flush = "leeren" Punktum

    greetz, Swordfish



  • Swordfish schrieb:

    to flush = "leeren"

    naja sagen wir's mal so: wenn du das glas bier auf 'ex' austrinkst ist das ein 'flush'. kippst du es in den ausguss, dann nicht.
    🙂



  • Wenn ich ein Bier wegkippe, so ist das a) Verschwendung und b) nicht ich.

    greetz, Swordfish


Anmelden zum Antworten