[ACCEPTED]-Difference between while(i=0) and while(i==0)-c++

Accepted answer
Score: 13

No, it won't go into an infinite loop:

while (i=0) { /* this code is never run */ }

explanation:

i = 0;

evaluates 1 to 0 which is "false" in conditions.

Score: 13

while (i = 0) will assign the value 0 to i and then check whether 14 the value of the expression (which is the 13 value assigned, i.e. 0) is non-zero. In 12 other words, it won't execute the body of 11 the loop even once... it'll just set i to 10 0. It'll also raise a warning on any decent 9 compiler, as it's a common typo.

Following 8 the same logic, while (i = 1) would assign the value 7 1 to i and always execute the loop body... only 6 a break (or exception) within the loop would 5 terminate it.

(Many other languages don't 4 have this issue as widely, as they require 3 an expression of a boolean type for conditions 2 such as while and if. Such languages still 1 often have a problem with while (b = false) though.)

Score: 4

The program will not print anything out. The 5 loop

while(i=0)

is an assignment rather than a comparison, meaning 4 that it will assign i the value zero, then 3 evaluate to the new value of i (namely, zero). C++ interprets 2 zero values as false, and so the loop will 1 not execute at all.

Score: 3

The second loop will not print anything.

while( i = 0 )

will 2 work as

while( ( i = 0 ) != 0 )

and that will be equivalent to

i = 0;
while( i != 0 )

which 1 is clearly the same as

i = 0;
while( false )
Score: 3

i = 0 : assign value 0 to variable i

i == 0 : test the 5 variable i for the value 0

a lot of coders 4 recommend putting the value you're testing 3 for at the left hand side of the expression 2 to avoid this common mistake, e.g.:

while (0 == i) would 1 evaluate, however while (0 = i) would report an error.

Score: 2

while (i = 0): 0 will be assigned to i, then the expression 7 will be evaluated. It's value is 0, so the 6 while loop will be terminated immediately. Sometimes 5 the compiler warns you about this.

while (i == 0): i is 4 compared to 0 (without any assignment), and 3 when i is not equal to 0, the while loop 2 is terminated.

To avoid this as an error, some 1 programmers write while (0 == i), then while (0 = i) is invalid.

Score: 1

while (i=0) will cause i to be set to 0, and then will 3 check if i is "true," i.e., nonzero. i will 2 never be nonzero, so the condition is considered 1 false and the loop skipped.

Score: 1

When compiling with optmization, the C++ compiler 2 will not even compile the body of the while loop 1 as it knows that it will never be entered.

Score: 1

What will the output be? It depends on 12 the user input. If you input a string, I 11 believe it will throw an exception. It 10 may also throw an exception if the user 9 inputs a negative number for n. In my test, I 8 got a segmentation fault: http://codepad.org/i1Z2iQFe

Otherwise, as 7 everyone else said, nothing will be output, since 6 the expression in the while loop always 5 evaluates to false. i = 0 always evaluates to 4 0, which in C++ always evaluates to false.

Also 3 note that this code fails to delete A, which 2 is a bad idea, and in a larger program would 1 create a memory leak.

Score: 1

For getting some extra points, write that 2 you can avoid such unintended assignments 1 using syntax like while (0 == i) instead.

More Related questions