Can somebody please explain why a while statement like
while (ch != '\n' || ch != '\t' || ch != ' ') { ... }
does not work as I expected?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
UPDATE: As per your other comment, your expression is wrong – it has nothing to do with “while” having multiple conditions.
ch != '\n' || ch != ' 'is ALWAYS true, no matter what the characters is.If the character is NOT a space, the second condition is true so the OR is true.
If the character is a space, the first condition is true (since space is not newline) and the OR is true.
The correct way is
ch != '\n' && ch != ' ' ...OLD answer:
Under normal circumstances there’s no problem whatsoever with the expression above (assuming you wanted to do just that).
The only issue with yours is that it can sometimes be less than optimal (e.g. if b and c never change throughout the loop, in which case you need to cache the value of
b!=1in a variable).whilewith multiple conditions may have a problem in one case – if those multiple conditions actually have intended side effects.That is due to lazy evaluation of || and && in C, so that if the first expression is true, the rest will NOT be evaluated and thus their side effects will not happen.