我目前正在尝试获取表单的 3 条特定输入行:
XX.XX (float) XX (1-3 位整数) XX (1-3 位整数)
以下是我拥有的当前代码:
inputStringOne := stdin nextLine.
mealCost := inputStringOne.
Transcript show: inputStringOne; cr .
inputStringTwo := stdin nextLine.
tipPercent := inputStringTwo.
Transcript show: inputStringTwo; cr .
inputString := stdin nextLine.
taxPercent := inputString .
mealCost inspect .
tipPercent inspect .
taxPercent inspect .
我已经在这进行了 3-4 小时的编程、搜索互联网等。我是一个超级初学者,自学 Smalltalk,所以我想看看为什么 nextLine 没有正确读取输入。以下是输入标准输入的示例输入,以及成绩单显示和检查的结果:
标准输入上的示例输入:
10.25
17
5
标准输出上的输出:
10.25
.25
An instance of String
contents: [
[1]: $1
[2]: $0
[3]: $.
[4]: $2
[5]: $5
]
An instance of String
contents: [
[1]: $.
[2]: $2
[3]: $5
]
An instance of String
contents: [
[1]: $.
[2]: $2
[3]: $5
]
10.25
当我只执行以下代码时,我看到所有 3 个输入由 <10> 分隔,我认为这是回车或换行。
"just print all contents in stdin"
inputS := stdin contents.
inputS inspect .
样本输入(标准输入):
10.25
17
5
输出(标准输出):
An instance of String
contents: [
[1]: $1
[2]: $0
[3]: $.
[4]: $2
[5]: $5
[6]: $<10>
[7]: $1
[8]: $7
[9]: $<10>
[10]: $5
]
所以似乎由于某种原因,代码的第一行是唯一得到的stdin nextLine .
,但其余的只得到最后 3 个字符(小数点和小数点后的 2 个数字)。我不确定为什么会这样。
我试过nextAvailable
, flush
, commit
, stdin close
, 和其他一些方法,都无济于事。我的一个想法是解决这个问题是只得到整体stdin contents
,除以 <10>,然后将每个“部分”保存到 3 个不同的变量,但我想了解更多关于如何stdin nextLine
工作并更好地理解这也有关系stdin contents
。stdin nextLine
鉴于我们知道只有 3 个输入,有没有好的方法只做3 次?