Funktion, die Text zurück gibt



  • Ich will eine Funktion schreiben, die zwei Strings miteinander vergleicht. Wenn die Strings übereinstimmen, soll "Sehr gut" geschrieben werden, wenn nicht, wird zum erneuten Versuch aufgefordert. Leider bin ich nicht sehr weit gekommen. Mein bisheriger Versuch ist das hier:

    char vergleich(char a, char b) {
    	if (strcmp(a,b) == 0) {
    		printf("\nSehr gut.\n");
    	} else {
    		printf("\nVersuche es erneut.\n");
    	}
    }
    

    Theoretisch müsste ich die "Sehr gut" und "Erneuter Versuch" printfs wieder zurückgeben.

    Wäre nett, wenn mir jemand helfen könnte.



  • Ich hab dazu eine schöne Methode geschrieben:

    int compare(char *str1, char *str2) {
        int i;
        for (i = 0; str1[i] != '\0' && str2[i] != '\0'; i++)
            if (str1[i] != str2[i])
                return 0;
        return 1;
    
     /* printf("%i\n", compare("", ""));          1
        printf("%i\n", compare("eins", "eins"));  1
        printf("%i\n", compare("eins", "einse")); 1
        printf("%i\n", compare("einse", "eins")); 1
        printf("%i\n", compare("e1ns", "einse")); 0
        printf("%i\n", compare("einse", "e1ns")); 0 */
    }
    

    Dazu muss man wissen, an int != 0 ist immer true/wahr/richtig/1

    Und Zeichenketten mit "dieses hier ist ein Text" existieren immer, ein Zeiger darauf kann also der aufrufenden Funktion zurückgegeben werden

    Edit: Da die Länge vorher, außer durch den Aufrufer, nicht bekannt sein kann, ist die &&-Bedingung (Operator) vorschriftsmäßig



  • strcmp ist schon mal richtig, wenn auch falsch verwendet.
    Du hast einen Typkonflikt, der Compiler sollte hier warnen.
    strcmp erwartet "const char*" als Typ der Parameter, du übergibst "char".
    Was soll der "char" Rückgabetyp deiner Funktion machen?



  • void vergleich(char *str1, char *str2) {
    	if (strcmp(str1,str2) == 0)
    	    printf("Sehr gut.");
    	else {
    		printf("Nope");	
    	}
    }
    

    Wie schaffe ich es, dass das Ergebnis der Funktion immer wieder zurückgesetzt wird?



  • Das "\nSehr gut." kommt doch immer.



  • Ist jetzt blöd, dass du deinen Beitrag komplett geändert hast, denn so habe ich ihn nicht früher gesehen.

    Du möchtest folgendes?:

    #include <stdio.h>
    
    char *vergleich(char *str1, char *str2) {
        if (strcmp(str1,str2) == 0)
            return "Sehr gut.";
        else {
            return "Nope";
        }
    }
    
    int main(void)
    {
      char ergebnis[100];
      char *result;
    
      puts(vergleich(text1, text2));  //ok
    
      result = vergleich(text1, text2) // ok
      puts(result); 
    
      ergebnis= vergleich(text1, text2) // geht nicht
    
      strcpy(ergebnis, vergleich(text1, text2)); // ok
      puts(ergebnis); 
    
      return 0;
    }
    

    Das geht, da die Stringliterale global verfügbar sind.

    ⚠ folgendes ist falsch:

    char *vergleich(char *str1, char *str2) {
        char ok[] = "Sehr gut.";
        char ko[] = "Nope";
    
        if (strcmp(str1,str2) == 0)
            return ok;  // geht nicht, da das Array ok nach dem return nicht mehr existiert.
        else {
            return ko;  // geht nicht, da das Array ko nach dem return nicht mehr existiert.
    
        }
    }
    

    Es mag sein, dass es funktioniert. Troztdem ist es falsch.


Anmelden zum Antworten