Node.js平方程序输出末尾始终带0问题求助(新手)
解决Node.js平方计算程序末尾多出0的问题
嘿,作为Node.js新手遇到这种小问题太正常啦,我来帮你捋清楚问题出在哪,以及怎么解决~
首先看你的代码逻辑:你通过读取标准输入,把内容按换行拆成数组后逐个计算平方。但问题就出在stdin.split('\n')这一步——如果输入的结尾带有换行符(比如你输入数字后按了回车),拆分出来的数组最后一项会是空字符串。在JavaScript里,空字符串被隐式转换成数字的话就是0,所以最后一次循环计算的是0*0=0,也就导致输出末尾多了个0。
举个例子:假设你输入5然后回车,lines数组会是['5', ''],循环到第二个元素时,就会输出0,这就是多余的那个0的来源。
下面给你两个简单的解决办法:
办法一:提前过滤空行
在循环之前,先把数组里的空行(包括只含空格的行)过滤掉:
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').filter(line => line.trim() !== ''); for(var i=0; i<lines.length; i++) { process.stdout.write("" + lines[i] * lines[i]); } });
办法二:循环时判断行是否有效
如果不想修改原数组,也可以在循环里加个判断,只处理非空的有效行:
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++) { const trimmedLine = lines[i].trim(); // 只有非空的行才计算平方 if (trimmedLine) { process.stdout.write("" + trimmedLine * trimmedLine); } } });
额外提个小建议:如果你的程序需要处理用户可能输入的非数字内容,可以再加个数字有效性判断,比如!isNaN(Number(trimmedLine)),这样程序会更健壮哦~
内容的提问来源于stack exchange,提问作者sara r.
相关产品推荐
相关产品推荐

