[Technical Issue] JavaScript Basics - Console Input
Здравейте!
Дълго време търсих потребителски вход от конзолата при JavaScript, но не намерих нещо, което да работи. Някой дали знае как става това?
Здравейте!
Дълго време търсих потребителски вход от конзолата при JavaScript, но не намерих нещо, което да работи. Някой дали знае как става това?
Здравей,
Какво точно искаш да постигнеш, че не ми стана много ясно? Дай повече инфо.
Можеш да направиш едно инпут текстово поле в html-а и да прихващаш от него въведената стойност - ако това е за което питаш.
Според мен се има предвид да си пуснеш програмта през cmd и оттам да напишеш командата node (filename) за да можем да свикваме с ползването на конзолата, а не да въвеждаш входните данни оттам :)
http://stackoverflow.com/questions/8128578/reading-value-from-console-interactively
това май ще свърши работата
http://pastebin.com/eMuSWvzvКакво му е лошото на window.prompt когато става дума просто за подаване на някакви входни данни, колкото за тестване на коректността на домашното?!
Проблемът тогава, е че в условието пише: Run the program through Node.js. А ние го правим през prompt, което е в HTML-a
Здравейте !
Открих работещ начин да се чете от Windows Command Prompt при стартиране чрез команда node <file_name>.js
Исползва модул на Node, който създава интерфейс за четене на данни от конзолата. Важно е да се затвори - close();. За да може да се исползва конзолата след изпълнение на програмата.
Ето JS кода който трябва да се добави в .js файла за изпълнение :
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Тук се въвежда текст по желание, изписва се преди полето за въвеждане. ", function(input) {
// TODO: Трябва да се исползва - answer като входна стойност за функцията/програмата.
console.log("Тук се въвежда текста, който изскача преди резултата на функцията :", output);
rl.close();
});
input се исползва за входната стойност а на мястото на output е името на променливата съдържаща изходната стойност от функцията.
При мен работи ! Пробвайте и кажете дали се получава при вас .
Ето и линк към оригиналния пост - nodejs.org/api/readline
Ако решаваш на JavaScript задача в judge, която е била давана на изпит за C#, входът се приема с функция.
Например:
function solve(input) {
var number= parseInt(input[0]);
return result;
}
Може ли да дадеш пример когато инпутът е два масива на отделни редове, без да са отделени с друг символ освен нов ред! Например задача 5 от темата за Loops Arrays Strings. Ето ти подложка:
function compareChars(value) {
return value;
}
console.log(compareChars(['1', 'f', '1', 's', 'g', 'j', 'f', 'u', 's', 'q']
['1', 'f', '1', 's', 'g', 'j', 'f', 'u', 's', 'q']));
пробвах с value.split('\n'); но value си остава undefined. Оправя се когато сложа запетайка между двата масива, но пък тогава value приема стойността само на единия масив, а вторият се губи. Ако това е изпитна задача как ще се вземе входа?
Ако искаш да имаш 1 value, тогава може да приемеш инпута като масив от два масива:
console.log(compareChars([['1', 'f', '1', 's', 'g', 'j', 'f', 'u', 's', 'q'], ['1', 'f', '1', 's', 'g', 'j', 'f', 'u', 's', 'q']]));
Ако искаш да вземеш инпута като два отделни масива със запетая, може да промениш параметрите на функцията:
function compareChars(value1, value2){
return answer;
}
В JavaScript няма лесен начин да ползваш директен input от конзолата. Има workarounds, можеш целия вход да го записваш в един масив и после оттам да дърпаш каквото ти потрябва, но не работи перфектно и трябва да добавяш някакво парче код към задачата си. Както са писали колегите, в SpiderMonkey (engine-a на Mozilla) има вграден метод readline(), но той не винаги се държи както очакваш да се държи (Както Console.ReadLine() в C# например).
Що се отнася за домашните и входът към тях, ако имаш по условие HTML страница, ползвай или prompt(), или текстово поле в HTML, за да извличаш някакъв input към JavaScript-a. Ако нямяш HTML страница и файла се отваря през NodeJS, просто си напиши функцията вътре в кода (логиката) и накрая в кода просто извикай функцията като ѝ подаваш (хардкоднеш) някакви стойности (например стойностите, посочени в условието на задачата).
От конзолата вход, без HTML примерно конзолата да спре и да чака потребителя да вкара някаква стойност както в C# беше
int n = Console.ReadLine(); и потребителя вкарва стойност 5 примерно и после n = 5. Та как става това в JS.
В Java беше :
Ако говори за javascript като за уеб приложение и итерация с потребител през уеб - то понятието конзола би трябвало въобще да го изключиш като опция - никой потребител няма да ти отвяря браузърската конзола, за да ти въвежда от там някакви неща. Това не е типично и очаквано поведение за конзолата с JS.
http://msdn.microsoft.com/en-us/library/windows/apps/hh696634.asp
Вече ако използваш javascript в друг контекст - би трябвало да потърсиш някоя библиотека:
примерно тук https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Introduction_to_the_JavaScript_shell#readline%28%29
Като цяло не търси държане на JS като на Java или C#. При JS нещата са предимно свързани с event-и.
Наков каза, че няма лесен начин за четене от конзолата, защото попринцип този език не е направен за конзола. Ако те притеснява това как да приемаш Input-a на домашните работи и изпита, това се прави с функция която приема някаква/и променлива/и.