@Lorelin
Student web

Как не закончить цикл while?

Здравствуйте, выполняю задание по js:

Написать программу, которая последовательно запрашивает у пользователя числа при помощи prompt, пока он не нажмет “Отмена”. После нажатия “Отмена”, программа выводит сумму введенных чисел при помощи alert. Если пользователь ввел не число (а, например, строку), то это значение не суммируется с остальными.


Написал такой код:
let sum = 0;
 
while (i = +prompt('Введите число: ')) {
    sum += i;
};

alert('Сумма: ' + sum);


Все вроде ничего, но как сделать так, чтобы не происходила отмена цикла, когда пользователь вводит строку? Нужно просто пропускать ее и когда нужно выводить сумму всех чисел без введенных строк.
  • Вопрос задан
  • 879 просмотров
Решения вопроса 3
Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)
let sum = 0;
let strNumber = 0;
let number = 0;
while (strNumber !== null) {
  strNumber = prompt("Введите число:", ""); // Получаем из prompt строку либо число в виде строки, если нажата отмена то вернёт null
  number = Number(strNumber); // Приводим строку к числу, если строка не может быть числом то вернёт NaN см. https://learn.javascript.ru/type-conversions
  sum += (!isNaN(number)) ? number : 0; // Использую isNaN потому что Number.isNaN не будет работать в IE у isNaN есть особености см (https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/isNaN)
}
if(sum) {
  alert(sum);
}
Ответ написан
Комментировать
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
Ответ на вопрос:
let sum = 0;
 
while (i = prompt('Введите число: ')) {
    let j = parseInt(i, 10);
    if (Number.isNaN(j)) {
      continue;
    }
    sum += j;
};

alert('Сумма: ' + sum);


Если подробнее, то у тебя скрипт падал, когда применялся + результату prompt, если пользователь ввёл букву.
Ответ написан
Комментировать
Tim-A-2020
@Tim-A-2020
const arr = [];

function setintPromt() {
  let num = prompt('Введите число: ', '');
  if (num === null) {
    let result = arr.length ? eval(arr.join('+')) : 0;
    return alert(result);
  }
  if (+num) {
    arr.push(num);
  }
  setintPromt();
}
setintPromt();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Karpion
В prompt всегда вводится строка. Эту строку поим можно интерпретировать как число, причём разными способами, в т.ч. как римскую запись: I, II, III, IV, V, VI, VII, VIII, IX, X,...

Я навскидку не помню, что возвращает prompt при нажатии "Отмена". Читайте документацию.
Но уж точно не надо преобразовывать возвращаемое значение в число сразу же. Сначала надо проверить на отмену, и если да - то покинуть цикл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы