if(char1 == char2)
-
hallo,
ich moechte zwei char variablen miteinander vergleichen und anschliessend einen text ausgeben, wenn diese uebereinstimmen. aber auf herkoemmliche art und weise geht dies irgendwie nicht. ich habe versucht:if(char var_1 == char var_2)
{
printf("Hallo\n\n");
}
-
Für deine zukünftigen Posts:
"Geht irgendwie nicht", gibs nicht.
Beschreibe deine Probleme bitte präziser.Zum Thema:
if(var_1 == var_2) //also ohne variablentyp
Und wenn du nicht einzelne Zeichen, sondern Zeichenketten vergleichen möchtest, nimmst du
http://www.infodrom.north.de/cgi-bin/man2html?page=strcmp§ion=3&language=de
-
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-Hackerist 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"); }