PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] Funktionsrückgabe will nicht so recht



xmarvel
06-12-2002, 14:44
hi

Hab da mal eine Funktion geschrieben in C.
Aber irgendwie kommt da nur Müll raus. Ich glaube ich habe da irgendwo noch ein Denkfehler (der Code ist warscheinlich nicht so gut aber bin halt noch Anfänger)


receive(char wert)
{
//Deklarationen
char var[6];
char rec;
int i;

//ID auslesen von der Globalen Variable buf
var[0] = strtok (buf,";");

//Weitere Variablen durchpasen und einzeln abspeichern
for (i=1; i<5; i++)
{
var[i] = strtok (NULL,";");
}

//Eine eindeutige Bezeichnung zuweisen
switch (wert)
{
case 'Test0': sprintf(rec,"%c",var[0]); break;
case 'Test1': sprintf(rec,"%c",var[1]); break;
case 'Test2': sprintf(rec,"%c",var[2]); break;
case 'Test3': sprintf(rec,"%c",var[3]); break;
case 'Test4': sprintf(rec,"%c",var[4]); break;
case 'Test5': sprintf(rec,"%c",var[5]); break;
}
return rec;
}

wenn ich jetzt irgendwo dir funktion aufrufe und das herrausgelesene anzeigen will. kommt nur müll raus.


printf ("Ausgabe: %c \n", receive('Test1'));

Wieso passiert das ? %c ist doch richtig oder nicht ? ist doch eiegntlich als char deklariert.

(wer ein Verbesserung am Quellcode sieht kann er es ruhig sagen. ;) )

MFG
xmarvel

Lin728
06-12-2002, 14:58
Hi, hast du keinen Rückgabetyp definiert?

Geht so:

int recieve(parameter);

int main()
{
recieve();
}

int recieve(Parameter)
{
int i=3;

return i;
}

peschmae
06-12-2002, 15:05
nicht eher

char recieve(char wert) {

}

? - Schliesslich ist ja die zurückzugebende Variable auch ne Char...

MfG Peschmä

xmarvel
06-12-2002, 15:06
du meinst nicht receive(char wert) sondern char receive (char wert) ?
Also das hatte ich auch lange nur leider funtkioniert das auch nicht kommt genau das selbe zurück. Als Rückgabewert soll keine Zahlen sondern Zeichen zurückliefern siehe oben.
Aber sonst ist dein Quellcode eigentlich so wie mein Quellcode. Nur das meiner nicht funktioniert :p

tkortkamp
06-12-2002, 15:06
case 'Test0':
case 'Test1':
.
.
.
printf ("Ausgabe: %c \n", receive('Test1'));
Das wird niemals klappen! Ein char kann nur einen Buchstaben speichern... Außerdem um Strings zu vergleichen musst du strcmp oder besser strncmp benutzen (siehe http://www.pronix.de/C/standard_C/ckurs/ckurs53.html ).

c ya,
Tobias

peschmae
06-12-2002, 15:09
also wohl eher

char[]
oder
char*

oder so für den Parameter; hab ich gar nicht gesehen :D

MfG Peschmä

xmarvel
06-12-2002, 16:01
ihr antwortet aber alle schnell.
erstmal danke für die vielen antworten.
aber da ich noch ein Anfänger bin muss ich da nochmal nachfragen.
ich habe jetzt die Funktion so umgeändert char *receive (char *wert)
dann beschwerd sich aber mein Compiler bei der Switch Funktion :
main.c:122: switch quantity not an integer
hmm... hab bestimmt wieder was falsch verstanden.
Und kann ich meine Case Funktion behalten oder muss ich das irgendwie mit strcmp machen (wüsste erstmal nicht wie aber würde dann mal versuchen damit)

tkortkamp
06-12-2002, 16:22
Hmmm...
Ich befürchte, dass man deinen Code nochmal völlig umkrempeln muss...
Was möchtest du ganz genau erreichen? Könntest du dein ganzes Programm mal posten?

c ya,
Tobias

Trillian
06-12-2002, 16:47
Du kannst switch() nur mit Integers benutzen, aber nicht mit Strings (char arrays)!

Wie Tobias schon gesagt hast, musst du z.B. strcmp() benutzen:

if (!strcmp(wert, "Test0"))
printf("Es wurde Test0 eingegeben\n");
else...

man strcmp und guck dir die Strings-Passagen auf pronix.de an.

xmarvel
06-12-2002, 17:22
hi

Als erste sollte damit erreicht werden das der Programmierer den Quellcode besser lesen kann (also das ich im Quellcode nicht mehr immer var[0] benutzen muss sondern dort dann z.B. receive(Ip-Adresse) steht)
und als zweitens das wenn ein Array hinzukommt einfach einmal den Wert in der Funktion verändern. Und nicht den kompletten Quellcode durchsuchen muss und jede Variable umändern muss. Mehr muss die Funktion nicht können.
Hab gedacht das geht so mit meinem Quellcode aber anscheinend getäuscht.

MFG
xmarvel

xmarvel
07-12-2002, 14:26
hi

habe jetzt nochmal alles neu erstellt und jetzt funktioniert es. :D
Hier der neue Code:

char *receive(char wert[])
{
//Deklarationen
char *var[6];
char *rec;
int i;

//ID auslesen von der Globalen Variable buf (empfang wort)
var[0] = strtok (buf,";");

//Weitere Variablen durchpasen und einzeln abspeichern
for (i=1; i<5; i++)
{
var[i] = strtok (NULL,";");
}

//Eine eindeutige Bezeichnung zuweisen
if(!strcmp(wert,"test0")) strcpy(rec,var[0]);
if(!strcmp(wert,"test1")) strcpy(rec,var[1]);
if(!strcmp(wert,"test2")) strcpy(rec,var[2]);
if(!strcmp(wert,"test3")) strcpy(rec,var[3]);
if(!strcmp(wert,"test4")) strcpy(rec,var[4]);
if(!strcmp(wert,"test5")) strcpy(rec,var[5]);

return rec;
}