Anzeige:
Ergebnis 1 bis 11 von 11

Thema: [C] Funktionsrückgabe will nicht so recht

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128

    Post [C] Funktionsrückgabe will nicht so recht

    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)

    Code:
    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.

    Code:
    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Hmm...

    Hi, hast du keinen Rückgabetyp definiert?

    Geht so:

    int recieve(parameter);

    int main()
    {
    recieve();
    }

    int recieve(Parameter)
    {
    int i=3;

    return i;
    }

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    nicht eher

    char recieve(char wert) {

    }

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

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    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

  5. #5
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    Code:
    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

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    also wohl eher

    char[]
    oder
    char*

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

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    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)

  8. #8
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    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

  9. #9
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    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.

  10. #10
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    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

  11. #11
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128

    Smile

    hi

    habe jetzt nochmal alles neu erstellt und jetzt funktioniert es.
    Hier der neue Code:
    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;
    }

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •