Почему process.stdout.write () добавляет дополнительный 0 к квадрату результата?

1

Я просто пытаюсь округлить число, передавая число с помощью process.stdin, а затем используя process.stdout.write.

Я сначала попытался:

process.stdin.resume();
process.stdin.setEncoding('utf8');

var stdin = '';
process.stdin.on('data', function (chunk) {
    stdin += chunk;
}).on('end', function() {
    var lines = stdin.split('\n');
    for(var i=0; i<lines.length; i++) {
        let num = Number(lines[i])
        let sqrd = num*num
        process.stdout.write(sqrd);
    }
});

Затем я получаю ошибку типа данных, потому что возвращаю число, а не строку. Затем я попробовал следующую модификацию process.stout.write(sqrd):

process.stdout.write(sqrd.toString());  

Я ожидаю, если бы я передал значение 5, чтобы оно вернуло 25, но в действительном действии оно возвращает 250. Почему это?

Есть ли лучший способ вернуть результат?

EDIT: Я попытался выяснить тип возвращаемого значения:

process.stdin.resume();
process.stdin.setEncoding('utf8');

var stdin = '';
process.stdin.on('data', function (chunk) {
    stdin += chunk;
}).on('end', function() {
    var lines = stdin.split('\n');
    for(var i=0; i<lines.length; i++) {
        let sqrd = lines[i]*lines[i]
        process.stdout.write(typeof(sqrd));
    }
});

и он возвращает "numbernumber", который предполагает, что он пытается записать его дважды?

  • 1
    Возможно, ваш stdin столкнулся с 0 после 5 и когда оба в квадрате, результат составил 250
  • 0
    @rv7 rv7 Мне передают положительное целое число, поэтому я не уверен, как мне встретиться с 0 ...
Теги:

1 ответ

2
Лучший ответ

Вторая итерация вызвана символом New Line (\n), оставшимся в вашем массиве строк. Не перебирайте последний элемент. Чтобы исправить это, выполните следующие действия:

Изменить:

for(var i=0; i<lines.length; i++) {

Для того, чтобы:

for(var i=0; i<lines.length - 1; i++) {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню