Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Как сделать вопрос ответ в readline (https://javascript.ru/forum/node-js-io-js/77404-kak-sdelat-vopros-otvet-v-readline.html)

Retro_1477 27.04.2019 22:08

Как сделать вопрос ответ в readline
 
Мне нужно реализовать код который сможет задавать вопрос пользователю, а пользователь сможет на него ответить и таких вопросов должно быть несколько штук.

Вот что получилось, но сам счётчик работает неправильно, не знаю как записать конец вопроса.

Помогите решить проблему.


const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
// Предметная область
// Основы CSS  
const questions = [
    'Многоцелевое свойство, которое определяет, как элемент должен быть показан в документе, называется?',
    'Свойство которое, устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице, называется?',
    'Свойство которое, определяет цвет текста элемента, называется?',
    'Свойство которое, устанавливает величину отступа от каждого края элемента, называется?',
    'Свойство, предназначенное для отображения или скрытия элемента, включая рамку вокруг него и фон, называется?'
];

let scoreW = 0,
    scoreL = 0;


console.log(
 `Тестировщик знаний.
  Тема: Основы CSS.`
);
readline.clearLine()


rl.question('Для старта нажмите Enter', () => {
    console.clear();
});



rl.question(questions[0], (say) => {
    say == 'display' || say == 'Display' ? scoreW++ : scoreL++;
    console.clear();

});

rl.question(questions[1], (say) => {
    say == 'position' || say == 'Position' ? scoreW++ : scoreL++;
    console.clear();
    console.log(
        `Правильные ответы:${scoreW} Неправильные ответы:${scoreL}`
    );
});

Audaxviator 28.04.2019 10:35

Кхе-кхе...
const readline = require('readline');
	 
const rl = readline.createInterface({
		input: process.stdin,
		output: process.stdout
});
// Предметная область
// Основы CSS 
const questions = [
		'Многоцелевое свойство, которое определяет, как элемент должен быть показан в документе, называется?',
		'Свойство которое, устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице, называется?',
		'Свойство которое, определяет цвет текста элемента, называется?',
		'Свойство которое, устанавливает величину отступа от каждого края элемента, называется?',
		'Свойство, предназначенное для отображения или скрытия элемента, включая рамку вокруг него и фон, называется?'
];
 
let scoreW = 0,
		scoreL = 0;
console.log(
 `Тестировщик знаний.
	Тема: Основы CSS.`
);

rl.on('close', function() {
	console.log(`Правильные ответы:${scoreW} Неправильные ответы:${scoreL}`);
});

rl.question('Для старта нажмите Enter', () => {
	
	rl.question(questions[0], say => {
		say == 'display' || say == 'Display' ? scoreW++ : scoreL++;

		rl.question(questions[1], say => {
			say == 'display' || say == 'Display' ? scoreW++ : scoreL++;

			rl.question(questions[2], say => {
				say == 'display' || say == 'Display' ? scoreW++ : scoreL++;

				rl.question(questions[3], say => {
					say == 'display' || say == 'Display' ? scoreW++ : scoreL++;

					rl.question(questions[4], say => {
						say == 'display' || say == 'Display' ? scoreW++ : scoreL++;
						rl.close();
					});
				});
			});
		});
	});
});


Ну, или...
const readline = require('readline');
	 
const rl = readline.createInterface({
		input: process.stdin,
		output: process.stdout
});
// Предметная область
// Основы CSS 
const questions = [
		'Многоцелевое свойство, которое определяет, как элемент должен быть показан в документе, называется?',
		'Свойство которое, устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице, называется?',
		'Свойство которое, определяет цвет текста элемента, называется?',
		'Свойство которое, устанавливает величину отступа от каждого края элемента, называется?',
		'Свойство, предназначенное для отображения или скрытия элемента, включая рамку вокруг него и фон, называется?'
];
var answers = ['display', 'dfdf', 'dfdf', 'dfdf', 'dfdf'];
 
let scoreW = 0,
		scoreL = 0;
console.log(
 `Тестировщик знаний.
	Тема: Основы CSS.`
);

rl.on('close', function() {
	console.log(`Правильные ответы:${scoreW} Неправильные ответы:${scoreL}`);
});

goQuest();

async function goQuest() {
	for(var i=0; i<questions.length; i++) {
		var res = await foo(questions[i], answers[i]);
		if(res == 1) scoreW++;
		else scoreL++;
	}
	rl.close();
}

function foo(q, a) {
	return new Promise( function(resolve, reject) {
		rl.question(q, say => {
			say.toLowerCase() == a ? resolve(1) : resolve(0);
		});
	});
}

Retro_1477 28.04.2019 16:11

Я просто пока это писал, думал о прелестном паскале, который позволяет делать это в разы легче)
Мне понравился вариант с матрёшкой, спасибо большое!

Audaxviator 28.04.2019 16:36

Вот так всегда. Хочешь как лучше, а нравится - что похуже.


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