此处是尼姆语问题。我想从stdin中读取一系列浮点数(此示例:7、1、4、4,nan,4)并将其存储为seq[float]
类型。输入内容可能包含NaN。但是我无法整合这些异常值。
我的代码:
var
line: TaintedString
timeSeries: seq[float]
while readline(stdin, line) != false:
echo timeSeries
timeSeries.add(parseFloat(line))
输出:
@[]
@[7.0]
@[7.0, 1.0]
@[7.0, 1.0, 4.0]
@[7.0, 1.0, 4.0, 4.0]
@[7.0, 1.0, 4.0, 4.0, nan]
@[nan, nan, nan, nan, nan, nan]
面对第一个NaN,Nim将所有输入呈现为NaN。但是我想要这个(输出的最后一行):
@[7.0, 1.0, 4.0, 4.0, nan, 4.0]
如何在Nim中正确解决它? Documentation说支持NaN…
答案 0 :(得分:1)
由于您在添加下一个数字之前先回声timeSeries
,因此在输入4
的最后一行时会引起@[7.0, 1.0, 4.0, 4.0, nan]
,这是您的猜测在那之后做了最后的输出线。尽管我怀疑是否有任何理由将序列中的每个值都设置为NaN
,但这可能是您的输入触发了错误的原因。
我无法复制您的输出
输入您的代码时添加代码(添加所需的import strutils
),然后输入另一个4
,nan
或空行(后者在无效浮点数时出错)。
为了便于测试,我将您的输入内容放在文件input.txt
中:
7
1
4
4
nan
4
并在最新的稳定nim(Nim Compiler版本0.19.4 [Linux:amd64])上运行以下命令作为最新的devel nim(Nim Compiler版本0.19.9 [Linux:amd64]):
import strutils
var
line: TaintedString
timeSeries: seq[float]
echo timeSeries
for line in "input.txt".lines:
timeSeries.add(parseFloat(line.strip))
echo timeSeries
(.strip
只能处理剪切和粘贴以及草率编辑的结果中的输入尾随空格)
两个编译器的输出:
@[]
@[7.0]
@[7.0, 1.0]
@[7.0, 1.0, 4.0]
@[7.0, 1.0, 4.0, 4.0]
@[7.0, 1.0, 4.0, 4.0, nan]
@[7.0, 1.0, 4.0, 4.0, nan, 4.0]
使用-d:release
进行编译也不会引起任何错误。