if(char1 == char2)



  • Ja, das geht leider nicht, da die char variablen eigentlich nur addressen auf das chararray sind, indem dein text steht! um zwei strings mit einander zu vergleiceh muesstest du folgendes machen:

    #include <string.h> //ist wichtig fuer die funktion
    #include <stdio.h>
    
    int main()
    {
      if(strcmp(var_1, var_2))
      {
        printf("gleich");
      }
      else
      {
        printf("ungleich");
      }
      return 0;
    }
    

    also zum vergleichen immer strcmp (stringcompare) benutzen!



  • aber dann bitte so

    XFame schrieb:

    #include <string.h> //ist wichtig fuer die funktion
    #include <stdio.h>
    
      if(strcmp(var_1, var_2) == 0)   // returnwert 0 bei identischen strings
      {
        printf("gleich");
      }
      else //-1, +1
      {
        printf("ungleich");
      }
    


  • thx to all, programmier sonst nur mit der WinApi, brauchte jetzt aber eine reine c funktion, musste alles etwas schneller gehen, steh unter zeitdruck.

    noch einmal danke fuer die schnelle hilfe



  • leo aka qsch schrieb:

    aber dann bitte so

    Oeehm: Probiers aus, es geht 😉
    Da if{} eh immer auf 0 prueft!! 😛

    MfG sollte net boes gemeint sein 😃



  • Hi!

    if prüft auf ungleich 0, der Code von leo aka qsch prüft auch gleich 0.

    return (0) ? 0 : 1; // Was wird zurückgegeben?
    

    Code-Hacker



  • Code-Hacker schrieb:

    if prüft auf ungleich 0, der Code von leo aka qsch prüft auch gleich 0.
    Code-Hacker

    ist da nicht ein Widerspruch drin?
    oder meinst du mit "auch", dass er es auch wie ich gemacht hat?

    Naja jedenfalls muesste doch mein code trotzdem funktionieren, oder nicht?



  • Hi!

    Diese "auch" sollte "auf" heißen.
    In deinem Code vergleichst du nicht auf ==0, wenn also der Rückgabewert von strcmp gleich 0 ist, dann landest du in else, statt in if, wo du eigentlich landen willst.

    0 ? 0 : 1;
    1 ? 0 : 1;
    

    Beides nichts anderes als if(0) bzw. if(1). Beim ersten wird in den Else-Zweig gesprungen und somit 1 zurückgegeben. Beim zweiten wird in den if-Zweig geprunfen und 0 zurückgegeben. if prüft also auf ungleich 0, denn alles was nicht 0 ist ist true (bzw. 1).

    Dein Code funktioniert also nicht. Denn ist der String gleich steht da soviel wie if(0) und d.h. else wird angesprungen. Bei leo aka qsch steht bei Gleichheit der Strings soviel wie if(0==0) drin und das wird zu 1 ausgewertet, also wird in den if-Zweig gesprungen.

    Code-Hacker



  • @Code-Hacker: Compiliere es, es geht!!! Aber nur wenn es normale Char variablen sind (ein zeichen).

    char var_1="H";
    char var_2="H";
    

    Ich verstehs allerdings auch nicht, da strcmp 0 zurueck gibt und das ja falsch ist, aber es geht!!!



  • Hi!

    Wovon redest du jetzt eigentlich?
    Erstmal ist deine definition falsch, denn wenn du einer char Variablen einen Wert zuweisen willst, darfst du nicht die doppelten Hochkommas verwenden:

    char var_1='H'; // 1 char
    char var_2='H';
    

    Desweiteren bin ich von C-Strings ausgegangen:

    char var_1[]="H"; // 2 chars: "H\0"; also String
    char var_2[]="H";
    

    Folgendes liefert bei mir logischerweise "ungleich":

    char var_1[]="H";
      char var_2[]="H";
      if(strcmp(var_1, var_2))
      {
        printf("gleich");
      }
      else
      {
        printf("ungleich"); // ich lande hier
      }
    

    Um im if-Zweig zu landen muss die if-Bedingung so lauten:

    if(strcmp(var_1, var_2) == 0)
    

    Es wird 0 zurückgeliefert und auf 0 verglichen, 0 und 0 sind gleich, also true.

    Wenn du nur 2 char vergleichen willst, und keinen ganzen String, dann geht das auch mit == da ja die Zeichenwerte verglichen werden (char wird intern als Zahl gespeichert):

    char var_1='H';
      char var_2='H';
      if(var_1 == var_2) 
      {
        printf("gleich");  // ich lande hier
      }
      else
      {
        printf("ungleich");
      }
    

    Achja, alle Codeteile von mir hier sind getestet mit dem gcc 3.4.2 (laut gcc -v; wieso steht in den manpages 3.2.1?) und folgenden Compileroptionen (sollten wir immer benutzen um C89 zu gewährleisten): -ansi -pedantic -Wall -Werror
    Einen Test mit == 0 in der o.g. if-Bedingung habe ich natürlich auch (überflüssigerweise) durchgeführt. Ich bin wie erwartet im if-Zweig gelandet.

    Code-Hacker



  • char var_1[]="H";
      char var_2[]="H";
      if(!strcmp(var_1, var_2))
      {
        printf("gleich"); //ich lande hier(wo ich auch sein soll)
      }
      else
      {
        printf("ungleich");
      }
    

    🙂


Anmelden zum Antworten