C scanf эквивалент в nodejs

Если я хочу читать из входного потока в C , я пишу scanf ., Есть ли эквивалентный метод в NodeJS , чтобы сделать то же самое?

For example, here's the code in C

int n,
    m,
    i;

scanf("%d", &n);

for (i = 0; i < n; i++) {
    scanf("%d", &m);

    ............

}

Вот где я начинаю с Node ... TODO указывает, где я застрял:

process.stdin.resume();
process.stdin.setEncoding("ascii");

process.stdin.on("data", function (input) {
    var n = +input;
    for (var i = 0; i < n; i++) {
       //TODO
    }
});
5
nl ja de

3 ответы

Для начала вызов scanf и событие data </​​code> для читаемого потока в NodeJS не эквивалентны. В примере NodeJS вам нужно будет разобрать кусок введенного вами ввода.

Вы можете проверить, как эти куски будут отправлены вам, заменив тело вашего метода on простым:

process.stdout.write('onData: ' + input + '\n');

Учитывая, как input затем содержит ваши данные, вам нужно использовать какой-либо метод для извлечения интересующей строки, а затем использовать parseInt . Возможно, наивный подход к вашей проблеме, предполагая 1 целое число на input :

var n = 0;
var m = 0;
var state = 0;
process.stdin.on('data', function (input) {
    switch (state)
    {
    case 0:
       //we're reading 'n'
        n = parseInt(input.trim(), 10);
        state++;
        break;

    default:
       //we're reading 'm'
        m = parseInt(input.trim(), 10);

        if (state++ == n)
        {
           //we've read every 'm'
            process.exit();
        }
        break;
    }
});

Я не очень большой поклонник этого способа получения данных в вашем цикле событий NodeJS, вам следует искать аргументы командной строки, файлы конфигурации/ввода или некоторые другие способы.

11
добавлено
+1 отличный ответ, объяснение и советы по альтернативам
добавлено автор user633183, источник

Проверьте sget .

var sget = require('./sget');

var width = sget('Width?'),
    height = sget('Height?'),
    area = width * height;

console.log('Area is', area);
3
добавлено

Эта функция будет выполнять то, что вы просили:

function readNums(s) {
  //Split it up into numbers and spaces
   var array = s.split(/(\d+)/);

  //Keep just the numbers
   array = array.filter(function(i) {return "" + +i == i});

  //Convert back to a number
   array = array.map(function(i) {return +i});

  //How many elements should there have been?
   var maxLen = array.shift();

   if (array.length < maxLen) {
     throw "Not enough enough numbers";
   } else {
     array.length = maxLen;
   }


   return array; 
}

console.log(readNums("4 10 20 30 40 50 60 70"));

Результат:

[10, 20, 30, 40] 
1
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Node.js — русскоговорящее сообщество
Node.js — русскоговорящее сообщество
4 160 участник(ов)

Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было комфортным. Правила: https://rudevs.network/ByaMH6un7 См. также: @js_ru, @react_js, @angular_ru, @vuejs_ru, @devops_ru Вакансии и поиск работы: @javascript_jobs и @nodejs_jobs

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском

Node: русскоязычное сообщество
Node: русскоязычное сообщество
28 участник(ов)

Независимое сообщество node разработчиков на русском языке. Правила: https://node-chat.ru/ Партнеры: @react_ru @ru_vuejs @nuxtjs_ru @ru_docker @nlp_ru