我能够推送数组中的第一个整数元素。之后,它将每个输入值作为NaN。
如何在运行时删除数组输入中的空格。 正如Ryan所说readLine正在返回一些不可解析为整数的东西。
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;
process.stdin.on('data', function (data) {
input_stdin += data;
});
process.stdin.on('end', function () {
input_stdin_array = input_stdin.split("\n");
main();
});
function readLine() {
return input_stdin_array[input_currentline++];
}
/////////////// ignore above this line ////////////////////
function main() {
var n = parseInt(readLine());
var a = [];
for(var i=0;i<n;i++)
{
/*I am able to get first input but not for next iteration input value taken as NaN*/
var no = parseInt(readLine(),10);
console.log(readLine())
a.push(no);
}
}
例如,
输入:1 2 3 4 5
输出:1 NaN NaN NaN NaN
答案 0 :(得分:1)
根据给定的输入1 2 3 4 5
,它将失败,因为数字之间有空格。对于除数字之外的任何输入,parseInt
都会返回NaN
。
你可以自己尝试一下:
parseInt('1 2 3 4 5', 10) // returns 1
parseInt('12345', 10) // returns 12345
您可以在此处详细了解它(以及parseInt
的替代方案):https://coderwall.com/p/5tlhmw/converting-strings-to-number-in-javascript-pitfalls
你可以做的是验证输入并删除所有斜杠:
"1 2 3 4 5".replace(/\s/g, ""); // "12345"
这将使您的函数在与其他输入失败时很好地处理数字输入。它看起来像你的函数应该处理各种输入,而不是使用RegEx过滤掉像空格一样的东西(并且,正如古老的格言所说,you now have two problems)