赞
踩
在做华为机试的时候,代码模板用的是nodejs的标准输入process.stdin和输出process.stdon。在实现循环输入时,代码复制到本地ide调试会出现在控制台用尽方法都无法结束输入,导致调试失败。因为是mac电脑,window的ctrl+z或者ctrl+d都无效。
一、为什么?
先来看看华为的输入输出模板:
- process.stdin.resume();
- process.stdin.setEncoding('utf-8');
- let input = '';
- process.stdin.on('data', (data) => {
- input += data;
- });
- process.stdin.on('end', () => {
- let inputArray = input.split('\n');
- /**
- * 待实现函数,在此函数中填入答题代码
- * doFunc()
- */
- process.exit();
- });
代码理论上看起来没问题,有end函数,可以结束的。但是实际上无论输入什么,都无法触发输入的end。我们来看看官网上对stdin的定义:
文档说:当输入流接收不到任何字符的时候,它就会结束了!
好像很有道理的样子,但是为什么我就是无法结束!是不是针对我!
然后我就发现,为什么华为的input总是要split掉‘/n’?哦,想起来JavaScript的标准输入总是字符串格式,所以接收到的回车符也会转换成字符,那这样的话输入流里就一直在接收字符,肯定无法触发end事件了!
原来是这样!
那接下来就好办了,我只需要写一个判定,判断当前接收到的data如果只是一个回车符,那就手动触发end事件!
于是,只需要在input前面加上一个判定:
- process.stdin.on('data', (data) => {
- if (data === '\n'){
- process.stdin.emit('end');
- }else{
- input += data;
- }
- });
这样问题就解决了!大功告成!最后完整版华为JavaScript的ide调试模板如下:
- process.stdin.resume();
- process.stdin.setEncoding('utf-8');
- let input = '';
- process.stdin.on('data', (data) => {
- if (data === '\n'){
- process.stdin.emit('end');
- }else{
- input += data;
- }
- });
- process.stdin.on('end', () => {
- let inputArray = input.split('\n');
- /**
- * 待实现函数,在此函数中填入答题代码
- * doFunc()
- */
- console.log(/*你的答案*/);
- process.exit();
- });
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
直接复制放到ide就可以直接在ide里做华为机试题啦,写完直接复制dofunc里放进机考平台就可以了。
JavaScript用来做机试真的太难了,真的要哭出来。输入格式总是各种坑,希望大家都能机试拿到高分!收获超级无敌多offer!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。