您的任务是实现一个类似于nl
GNU核心实用程序中的命令行工具的程序。
禁止出现标准漏洞。
您不得使用任何内置或外部函数,程序或实用程序来对文件或字符串的行进行编号,例如文件nl
本身或=
GNU sed中的命令。
规格
输入值
该程序接受文件名作为参数。您的代码不必跨平台。应该使用运行代码的操作系统的文件名格式,即,如果您恰巧在Windows上,则目录分隔符可以为\
或/
。
您必须能够获取64个输入文件,包括-
已指定的文件。如果给出的数目超过64,则仅处理前64个。
在文件名列表中,-
代表标准输入。
如果给出了文件名,请按给出的顺序读取文件并连接其内容,并在文件名和末尾之间插入新行。如果您无法读取一个或多个文件名(因为文件不存在或您没有读取权限),请忽略它们。如果指定的所有文件名均无效,则不输出任何内容。
如果未提供文件名,请从标准输入中读取。如果未提供文件名或未提供文件名,则仅从标准输入中读取-
。
输出量
程序将输出带有标准行编号的输入作为标准输出(您可以假定输入具有\n
,\r\n
或\r
行尾;请选择对您方便的任何一种,但要指定哪一个):
<5 spaces>1<tab><content of line 1 of input>
<5 spaces>2<tab><content of line 2 of input>
...
<4 spaces>10<tab><content of line 10 of input>
...
<3 spaces>100<tab><content of line 100 of input>
...
...
行号分配了6个空格,并在这些字符的末尾插入;其余的变成空格(例如1
将有5个前导空格,22
将有4个前导空格,...)。如果输入足够长,则最终将在行上用完行号的空间999999
。在999999行之后,您不得输出任何内容。
如果输入为空,则不输出任何内容。
退出状态
较低的数字优先:如果遇到错误1和2,则以状态1退出。
如果成功接收到输入,并且状态行成功编号并输出,则以状态0退出。
如果找不到或无法读取命令行上指定的一个或多个文件,则以状态1退出。
如果给出的文件过多(超过64个),则以状态2退出。
如果输入太长(超过999999行),则以状态3退出。\
计分
这是代码高尔夫球-最短的程序胜出!
稍后我可能会为实施某些选项而增加奖金nl
。目前没有奖金。
prompt()
模拟程序args和stdin?