2016-12-20 12 views
-2

Ich möchte es eine einzige if-Anweisung zu überprüfen, sowohl die name und familyname Variablen.Wie mehrere if-Anweisungen in einem zu kombinieren

Ich möchte, dass meine Aussage wie diese somthing sein:

if(strcmp(name && family name , "first" /* how can i do here??? */) == 0){} 

Meine aktuellen Code sieht wie folgt aus:

if (strcmp(name , "MyName") == 0){ 
    if (strcmp(familyname,"Myfamilyname") == 0){ 
     printf("Name:%s %s is Verified!\n", name , familyname); 
    } 
} 
+0

Größere Arrays, 'strcpy' und' strcat'? –

+3

Hinweis: jedes nächste 'if' kann im vorherigen' if' durch '&&' ersetzt werden, wenn es keine 'else' Teile gibt. –

+1

@PaulOgilvie. Und manchmal sogar dann, wenn du schlau genug bist. –

Antwort

2

Just do 2 strcmp wie du:

if ((strcmp(name, "MyName") || strcmp(family_name, "MyFamilyName")) == 0) { 
    // do your stuff 
} 

Verwenden Sie den Binär- oder Operator ||, so dass wenn einer der Rückgabewerte diffe ist Miete von Null, das ganze Ergebnis ist auch anders als Null.

+3

Es ist keine gute Idee, bitweise Operatoren zu verwenden, wenn das logische '||' ausreicht. Bitweiser Operator hat keine Kurzschlussauswertung. – user694733

+0

@ user694733 Das stimmt, danke, ich habe meine Antwort bearbeitet. – Boiethios

+0

| welcher Betreiber heißt das ??? Ich wusste das nur || –

1

Hier ist die kombinierten Bedingungen

if ((strcmp(name , "MyName") == 0) && (strcmp(familyname,"Myfamilyname") == 0)){ 
    printf("Name:%s %s is Verified!\n", name , familyname); 
} 
+0

danke für deine Hilfe das hat auch funktioniert! –

3

Sie den && Operator verwenden:

if(!strcmp(name, "MyName") && !strcmp(family_name, "MyFamilyName")) { 
    // do your stuff 
} 

C den logischen Operatoren (&& und ||) Kurzschlüsse unterstützen. Das heißt, sobald der Wert des Ausdrucks bekannt ist, wird der Rest nicht ausgewertet. Wenn zum Beispiel der erste strcmp einen Wert ungleich Null ergibt (der erste Name stimmt nicht überein), wird der zweite Vergleich überhaupt nicht durchgeführt, da der Ausdruck an diesem Punkt nicht wahr sein kann. Dies kann verwendet werden, um zu überprüfen, für Dinge seiner NULL, zum Beispiel: if(name != NULL && !strcmp(name, "blah")) ...

! Der Operator logisch nicht, was wandelt jeden Nicht-Null-Wert in eine Null und jede Null in eine Eins. (Dies unterscheidet sich von Binär nicht ~, die alle Bits einzeln kippt: !5 == 0, aber ~5 == -6). !strcmp(...) ist daher eine Kurzschrift für strcmp(...) == 0.

Jeder logische Ausdruck des Formulars kann als !(A || B) umformuliert werden. Dies ist ein spezifisches Beispiel für De Morgan's Laws, das das Lesen von Code generell erleichtert. In Anbetracht dieser Tatsache Ihre if Aussage kann als

if(!(strcmp(name, "MyName") || strcmp(family_name, "MyFamilyName"))) { 
    // do your stuff 
} 

, die die Art und Weise ist es @Boiethios schrieb neu geschrieben werden.

+0

Danke, viel vollständiger als meine Antwort :) – Boiethios

+0

@Boiethios. Ich habe das tatsächlich gepostet, weil ich die äußeren Parens zuerst nicht bemerkt habe, dann bin ich zurückgelaufen und upgestimmt, sobald ich merkte, was du getan hast. –

+0

Ja, ich habe die Vorrangstellung des Operators nicht vergessen, OP hat es getan. – Boiethios

Verwandte Themen