Warum funktioniert mein Programm C++ nicht?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Naheliegend ist

if(text == "open"),

wie es hier schon vorgeschlagen wurde.

Aber auch das ist falsch, denn dann werden nicht etwa die Inhalte der Zeichenketten verglichen, sondern nur die Adressen, wo sie im Speicher liegen. Die sind aber garantiert verschieden.

Richtig wäre

if(strcmp(text,"open") == 0).


Kakuzo92 
Beitragsersteller
 12.08.2024, 18:22

Vielen Dank. Funktioniert jetzt😁

if (text="open")

Ein einfaches Gleichzeichen ist eine Zuweisung, und für char[] ist das gar nicht erlaubt.

Vergleiche macht man mit == (also text=="open"), was aber bei char[] nur die Zeiger vergleicht, und die sind immer verschieden.

Abhilfe: Teste mit 0==strcmp(text, "open"), oder definiere text als std:string.

Und lies künftig die Meldungen des Compilers. Dann brauchst Du nicht jedes mal nachzufragen.

Soweit ich das sehe hat die If-Abfrage keine {} Klammern. Außerdem muss bei dem if text == "open" anstelle von text = "open", weil = einen Wert zuweist und == diese Vergleicht. Richtig währe der letzte Teil mit dem If wahrscheinlich so:

if (text == "open") {
   cout << text;
}
Woher ich das weiß:Hobby – Ich programmiere seit 3 Jahren mit C#

tunik123  12.08.2024, 18:33

Wenn im if-Zweig (auch bei else) nur eine einzige Anweisung steht, kann man die geschweiften Klammern weglassen.

Der == Operator für char-Felder vergleicht bei C und C++ nur die Speicheradressen, aber nicht die Inhalte.

Kann sein, dass es bei C# eine bessere Lösung gibt.