Непонятки с циклом do while в JS

D
На сайте с 28.06.2008
Offline
976
67

Учу JS, дошел до задания,

Напишите функцию  sumInput() , которая:

  • Просит пользователя ввести значения, используя  prompt  и сохраняет их в массив.
  • Заканчивает запрашивать значения, когда пользователь введёт не числовое значение, пустую строку или нажмёт «Отмена».
  • Подсчитывает и возвращает элементы массива.

P.S. Ноль  0  – считается числом, не останавливайте ввод значений при вводе «0».


пишу код

function sumInput() {
let num = 0;
    let arr = [];
    do {
        num = prompt('Введите число');
    }
    while (parseInt(num) >= 0 || parseInt(num) <= 0){
        arr.push(num);
        console.log(num);
    }

return arr.length
}
document.write(sumInput())

В итоге не работает, даже консоль лог в цикле не пишет ничего.

Но стоит поднять пуш в секцию DO и все работает. Объясните почему пуш в самом While не работал?

Strategic Toaster
На сайте с 18.04.2019
Offline
12
#1

Омг. Как компилятор вообще такое съел 😳

Чувак, перечитай главу про циклы while и do..while

🥦
Strategic Toaster
На сайте с 18.04.2019
Offline
12
#2
Понял. Компилятор закончил конструкцию после while, «простив» пропущенную «;». 
Друг, добавь «use strict;» в начале файла, для сохранения психического здоровья в будущем. 

Как-то так:

function sumInput() {
  let num = 0;
  let arr = [];

  while (num = prompt('Введите число') && parseInt(num)){
    arr.push(num);
    console.log(num);
  }

  return arr.length;
}

document.write(sumInput());


IS
На сайте с 16.08.2006
Offline
125
#3
Цикл while неправильно написан - код после него не выполняется. Используйте обычный  while (true) {а тут все действия и выход}.
D
На сайте с 28.06.2008
Offline
976
#4

В чем неправильность цикла, я что-то не врублюсь? Что до возврата значения не доходит? Почему?

Судя по тому что консоль лог ничего не выводит - он даже в цикл не заходит... что странно

Strategic Toaster
На сайте с 18.04.2019
Offline
12
#5
Dram #:

В чем неправильность цикла, я что-то не врублюсь? Что до возврата значения не доходит? Почему?

Судя по тому что консоль лог ничего не выводит - он даже в цикл не заходит... что странно

У тебя перемешаны два типа цикла. Как while, так и do..while могут иметь только один блок кода: 

while (УСЛОВИЕ) { КОД }

и

do { КОД } while (УСЛОВИЕ)

соответсвенно.

JS твой код съел, приняв второй блок кода за независимый блок.

D
На сайте с 28.06.2008
Offline
976
#6
 Strategic Toaster , спс, теперь понял!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий