2016-11-30 1 views
-4

Sind die beiden Aussagen äquivalent?mit "== 0" mit einer "IF" -Anweisung

if (input != NULL && strcmp(input, "quit") == 0) 

und

if (input != NULL && strcmp(input, "quit")) 
+5

Nein, denn im zweiten Beispiel 'strcmp (Eingang, "quit")' entspricht 'strcmp (Eingang, "quit") = 0 '. In C werden alle Nicht-0-Werte als wahr betrachtet. –

+0

Nein, siehe @ WeatherVanes Kommentar. Aber Sie können '! Strcmp (input," quit ")' verwenden. – Aif

+1

[man strcmp] (https://linux.die.net/man/3/strcmp). – Lundin

Antwort

2

No. der erste, der überprüft, ob das Ergebnis 0 ist strcmp

Die zweiten überprüft, ob das Ergebnis der strcmp wahr ist. Aber wahr ist gleich einem anderen Wert ungleich null (Danke an UnholySheep für das Erzählen, wie ich es vergessen habe) und 0 ist gleich NULL. Sie sind also anders.

if (input != NULL && strcmp(input, "quit") == 0) 

if (input != NULL && !strcmp(input, "quit")) 

Als !strcmp überprüft, ob der Wert falsch ist: obwohl

Diese würden gleich sein. Falsch ist gleich 0.

+1

Technisch wird jeder Nicht-Null-Wert als "wahr" betrachtet. – UnholySheep

+0

Hoppla! Ja natürlich. Wie konnte ich vergessen ... –

+0

Das macht Sinn. Wenn INPUT nicht "quit" ist, sondern irgendeine andere Zeichenfolge wie "Bier ist gut", muss das Programm die Anweisungen überspringen, die in den geschweiften Klammern von IF verschachtelt sind. – Carlos

0

Sie müssten schreiben.

Dies ist, weil strcmp Null ist, wenn sie gleich sind, was bedeutet, dass es "false" zurückgibt, wenn sie gleich sind. Deshalb brauchst du das logische nicht.

Auch nur zu Ihrer Information NULL ist wirklich nur eine Konstante Null, so dass Sie auch schreiben könnten.

if(input && !strcmp(input, "quit") 
0

In C if Aussagen prüfen nur, wenn der Wert zero or non-zero ist. zum Beispiel if(3) oder if(-1) ist immer funktioniert aber if(0) wird nicht funktionieren.

Auch strcmp() Funktion gibt den Unterschied zwischen zwei Strings zurück, das Ergebnis kann 1, 35, -27 ... entsprechend Ihren Eingaben sein. strcmp() Ergebnisse 0, wenn nur die Strings gleich sind.

So ist if(input && !strcmp(input, "quit")) nicht if(input && !strcmp(input, "quit") == 0)

+0

Das macht Sinn. Wenn INPUT nicht "quit" ist, sondern irgendeine andere Zeichenfolge wie "Bier ist gut", muss das Programm die Anweisungen überspringen, die in den geschweiften Klammern von IF verschachtelt sind. – Carlos

+0

Wenn die Eingabe beendet ist, dann ist strcmp (Eingabe, "quit") 0. Wenn (0) bedeutet, wird if scope nicht ausgeführt. – cokceken

0

dieser Funktion werden die folgenden Werte zurück:

  • wenn Rückgabewert < 0, dann gibt es str1 als str2 weniger ist.

  • if Rückgabewert> 0 bedeutet, dass str2 kleiner als str1 ist.

  • Wenn der Rückgabewert = 0 ist, bedeutet dies, dass str1 gleich str2 ist.

Für Ihren Fall strcmp (Eingang, „quit“) nicht gleich 0, so dass die erste Aussage falsch sein wird, während der zweite wahr ist.

Weitere, check this out: link