Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   При сравнении с 0 (в prompt) как прервать по Esc? (https://javascript.ru/forum/misc/84639-pri-sravnenii-s-0-v-prompt-kak-prervat-po-esc.html)

Izumkin 06.11.2022 19:41

При сравнении с 0 (в prompt) как прервать по Esc?
 
Доброго времени!
Я совсем нуб, начинаю изучать, потому прошу прощения заранее.
Задача: вывод натуральных чисел.
Введенное пользователем в prompt сравнивается с 0, чтобы указать, если введено ненатуральное число. Но если стоит '<= 0', то и на нажатие Esc выводит сообщение про ненатуральное число. Как сделать, чтобы при вводе 0 выдавалось сообщение, а при нажатии Esc - прерывалась работа?

function askCh() {
  let n = +prompt('Chislo', '');
    if (n <= 0) showUnNatural(n)
    else showPrimes(n);
}
function showUnNatural(n) {
  alert(`Число (${n}) не натуральное. Введите натуральное число!`);
  askCh();
}

voraa 06.11.2022 20:30

promt возвращает строку.
При нажатии esc строка будет пустая.
Ну, а если ввели 0, то строка будет '0'

Izumkin 06.11.2022 21:27

Если в условии n<=0, то при вводе 0 - сообщение "Число (0) не натуральное...", а при Esc - "Число (null) не натуральное...".
При n<0, что ввод 0, что Esc просто прерывают работу кода, если это можно так назвать.
А как сделать, чтобы при вводе 0 - выдавало сообщение, а при Esc - прерывалась работа?
Работает только так
if (n === null);
      else if (n <= 0) showUnNatural(n);
      else showNatural(n);

но понимаю, что криво. Кода после (n === null) никакого, если туда пишу break - не работает вообще. Если (n === null) на вторую строчку перемещаю (за else if), то работает как выше написал. Не понимаю ничего (

voraa 06.11.2022 22:54

function askCh() {
	while (true) {
		const s = prompt('Chislo', '');
		if (!s) return null;
		const n = +s;
		if (n>0) return n;
		alert(`Число (${n}) не натуральное. Введите натуральное число!`);
	}
}

askCh();

Izumkin 07.11.2022 00:29

Цитата:

Сообщение от voraa (Сообщение 548795)
function askCh() {
	while (true) {
		const s = prompt('Chislo', '');
		if (!s) return null;
		const n = +s;
		if (n>0) return n;
		alert(`Число (${n}) не натуральное. Введите натуральное число!`);
	}
}

askCh();

Спасибо большое!


Часовой пояс GMT +3, время: 22:22.