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};