Что происходит, когда вы достигаете нуля?
while (cin >> x && x != 0)
Вы читаете в нуле и обнаруживаете, что х равен 0. Вы прекратите итерацию.
while (x != 0 && cin >> x)
Теперь x
установлен на ноль, но вы проверили предыдущее значение x
, которое еще не было равно нулю , затем .Таким образом, вы снова войдете в цикл:
sum += 0; // the current value of x
count++; // one summand more
и обнаружите, что x
получил ноль при проверке состояния цикла при последующем запуске цикла.
Inдругими словами, во втором варианте вы считаете ноль дополнительным слагаемым.