我正在尝试从标准输入中读取行
我想对新行中的正整数进行平方,并且从每行输入中,我想打印输出。
以下是我的代码:
process.stdin.resume();
process.stdin.setEncoding('utf8');
var stdin = '';
var chunk = '5\n25';
process.stdin.on('data', function (chunk) {
stdin += chunk;
}).on('end', function() {
var lines = stdin.split('\n');
for(var i=0; i<lines.length; i++) {
process.stdout.write(lines[i]*lines[i]);
}
});
这是一个错误:
throw new TypeError(
^
TypeError: Invalid data, chunk must be a string or buffer, not number
我真的不明白我写错了代码!感谢帮助。
修改1
当我尝试通过附加&#39; \ n&#39;来打印输出时最后如下例所示:process.stdout.write(lines[i]*lines[i] + "\n");
它正在打印输出,并在下一行中输出0,例如,如果我发送5作为输入它正在打印:
25 0
==&GT;在下一行打印0!这是我使用的utf-8的问题吗?
答案 0 :(得分:1)
process.stdout.write(lines[i]*lines[i]);
导致
的行 TypeError: Invalid data, chunk must be a string or buffer, not number
因为您正在尝试将数字传递给流。解决方案是将数字转换为字符串:
process.stdout.write("" + lines[i] ** 2);
现在当你应用它时,它可以工作,但它总是在结果后输出0。那是因为每次输入都是按Enter键发送的,这会将\n
添加到输入中,例如:
1 \n 2 \n
现在你这样做
var lines = stdin.split('\n');
所以行将是
["1", "2", ""]
那个方块将是
1, 4, 0 // as "" => 0
所以0是由输入末尾的空行引起的。所以你可以检查一下:
for(const line of stdin.split('\n')){
if(!line) continue;
console.log(line ** 2);
}
答案 1 :(得分:0)
您可以使用inBuilt readline
包来完成您的任务。
以下片段将从该行读取您的输入,并且“Enter”也将拍摄响应。
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', function(line){
console.log('Square of '+line+ ' : ' + line * line );
})
输出:
ValerianP-Macbook:src valerianpereira$ node app.js
25
Square of 25 : 625
66
Square of 66 : 4356
2
Square of 2 : 4
3
Square of 3 : 9
7
Square of 7 : 49
手动方法代码
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (chunk) {
chunk = chunk.toString().trim();
process.stdout.write('Square of ' + chunk + ' : ' + chunk * chunk + '\n');
});
输出:
ValerianP-Macbook:src valerianpereira$ node app.js
4
Square of 4 : 16
6
Square of 6 : 36
78
Square of 78 : 6084
22
Square of 22 : 484
希望这有帮助
答案 2 :(得分:-1)
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');
lines = lines.filter(Boolean);
for(var i=0; i<lines.length; i++) {
process.stdout.write(lines[i]*lines[i]+"\n");
}
});