Arbeite das erste mal mit structs... Probleme ohne Ende.



  • Hier der Code:

    #include <stdlib.h>
    
    struct ec_ui {
        char ec = 0;
        unsigned int ui = 0;
    };
    
    char successfull(ec_ui *r) {
        if ( *r.ec > -1 )
            return 1;
        return 0;
    }
    
    unsigned int value(ec_ui *r) {
        return *r.ui;
    }
    
    ec_ui charfind(char *str, char chr) {
            struct ec_ui index;
    
            while ( *str ) {
                if ( *str++ == chr ) {
                    return index;
                }
                index.ui++;
            }
            index.ec = -1; // nothing found
    
            return index;
    }
    
    int main(void) {
        //             pos=012345678901234567890
        //                          v
        char mystring[] = "abcdefghi/jklmnopq...";
    
        printf("expected   result: %2u\n",9);
    
        struct ec_ui result;
        result = charfind(*mystring, '/');
    
        if ( successfull(result) )
            printf("calculated result: %2u\n",value(result));
    
        return 0;
    }
    

    Hier der Kot:

    gcc src/testbed.c -o bin/testbed
    src/testbed.c:4: warning: no semicolon at end of struct or union
    src/testbed.c:4: error: parse error before '=' token
    src/testbed.c:6: error: parse error before '}' token
    src/testbed.c:8: error: parse error before '*' token
    src/testbed.c: In function `successfull':
    src/testbed.c:9: error: `r' undeclared (first use in this function)
    src/testbed.c:9: error: (Each undeclared identifier is reported only once
    src/testbed.c:9: error: for each function it appears in.)
    src/testbed.c: At top level:
    src/testbed.c:14: error: parse error before '*' token
    src/testbed.c: In function `value':
    src/testbed.c:15: error: `r' undeclared (first use in this function)
    src/testbed.c: At top level:
    src/testbed.c:18: error: parse error before "charfind"
    src/testbed.c: In function `charfind':
    src/testbed.c:19: error: storage size of 'index' isn't known
    src/testbed.c: In function `main':
    src/testbed.c:39: error: storage size of 'result' isn't known
    src/testbed.c:40: warning: passing arg 1 of `charfind' makes pointer from integer without a cast
    

    Eigentlich will ich nur etwas mit structs rumspielen.
    Ziel ist es ein struct zu haben, dass ErrorCode und RückgabeWert
    für Funktionen implementiert. ErrorCode < 0 heisst Funktion fehlgeschlagen.
    ErrorCode > -1 heisst Funktion erfolgreich, RückgabeWert (in diesem Fall ui)
    darf betrachtet werden.

    Vielleicht denke ich momentan noch zu sehr SHELL... 😉

    Was ist mein Problem hier??? Wie lösst man es?



  • du bist in c!

    wenn du ein struct definierst:

    struct MyStruct
    {
      int a;
    };
    

    musst du auch eine instanz auch mit struct anlegen

    MyStruct s; // < fehler
    struct MyStruct s; // << richtig
    

    ebendso bei den Rückgabewerten.
    mann kann natürlich auch typedefs defineren.

    typedef struct MyStruct MyStruct; // das darf sogar den gleichen namen haben
    MyStruct s; // < jetzt gehts
    

    praktischer weise vereint man das typedef meistens mit der struct deklaration

    typedef struct MyStruct
    {
      int a;
    }MyStruct;
    MyStruct s; // < jetzt gehts
    

    Desweiteren gibts sowas wie standardwerte nicht, also die " = 0;" raus aus der Definition.

    Dann nimmt deine successful funktioneinen Pointer auf deinen typ in Zeile 42 gibst du ihm aber das struct und nicht di Adresse.



  • Ehrlich gesagt konnt ich mit deiner Antowrt nichts anfangen.
    Vielleicht steh ich grad aufm Schlauch, aber ich hab doch
    meine struct Defition in Zeile 3-6 und ich initialisiere sie
    nach meinem Verständnis bei Zeile 39.

    Wieso ist das nun trotzdem falsch?

    Und meinst du ich soll successfull(&result) und value(&result)
    nehmen statt dasselbe ohne "&"???



  • ein problemchen ist z.b. dass du in der struct-definition initialisierungen versuchst. das geht nicht, weil noch kein objekt angelegt wurde.

    falsch

    struct ec_ui {
        char ec = 0;
        unsigned int ui = 0;
    };
    

    besser:

    struct ec_ui 
    {
        char ec;
        unsigned int ui;
    };
    struct ec_ui instance_of_ec_ui = {0,0};
    

    🙂


Anmelden zum Antworten