2016-04-07 17 views
1

Ich versuche eine While-Schleife zu verstehen. Ich erkläre die Grundlagen, wie ternäre Operatoren funktionieren, habe sie aber nur in loo-of-if-Anweisungen verwendet, nicht in einer while-Schleife. Dieser Codeabschnitt bringt mich wirklich um. Was wäre dieser Aussage äquivalent, wenn sie nicht verkürzt würde?ternäres bedingtes Operatoräquivalent?

int runOnce=0; 
while(runOnce=runOnce?((token=strtok(NULL," "))!=NULL):((token=strtok(strCopy," "))!=NULL)) { 
    .... 

Antwort

2

Ok, lass uns eins nach dem anderen gehen. Wie Sie gesagt haben, kennen Sie die Grundlagen zum ternären Operator, also werde ich direkt auf das Problem eingehen. Der Code hier:

// notice here I did not include the the assignment(=) operation and the variable before it 
runOnce?((token=strtok(NULL," "))!=NULL):((token=strtok(strCopy," "))!=NULL) 

was im Grunde bedeutet

if(runOnce) 
{ 
    return ((token=strtok(NULL," "))!=NULL); 
} 
else 
{ 
    return ((token=strtok(strCopy," "))!=NULL); 
} 

Dieser Rückgabewert wiederum speichern auf die gleiche Variable runonce

runOnce = // ternary condition mentioned above 

wird also schließlich, wenn die Variable runOnce ist wahr, dann ist die Bedingung für while-Schleife wahr

Aktualisiert: Um den Code verständlicher machen Sie so etwas wie dies

int runOnce=0; 
while(conditionForWhileLoop(runOnce)) 
{ 
    // ... 
} 

int conditionForWhileLoop(int runOnce) 
{ 
    if(runOnce) 
    { 
     return ((token=strtok(NULL," "))!=NULL); 
    } 
    else 
    { 
     return ((token=strtok(strCopy," "))!=NULL); 
    } 
} 

Natürlich tun können, gibt es viel Sie als dies tun können, aber es ist ein Anfang

+1

Okay, das klärt es ein wenig auf. Aber wäre ich in der Lage, es mit einer While-Schleife auch so zu schreiben? Anstatt den ternären Operator while loop statement in einem meiner Programme zu verwenden, möchte ich ihn auf eine leichter lesbare Weise implementieren. – FatFockFrank

+0

"Kann ich es auch mit einer While-Schleife schreiben?" - Ich habe diesen Teil nicht verstanden, aber was ich daraus entnehme, ist, dass Sie die Bedingung so schreiben wollen, dass es leichter zu lesen ist, ist das richtig? Versuchen Sie, den ternären Operator zu vermeiden? – sami1592

+1

Ja Entschuldigung über mein Englisch. Yup, ich versuche, die Verwendung eines ternären Operators zu entfernen. – FatFockFrank

3

Dies ist ein etwas klarer meiner Meinung nach.

token = strtok (strCopy," "); 
while (token!=NULL) 
{ 
    /* do stuff */ 
    token = strtok (NULL," "); 
}