【发布时间】:2017-05-12 11:17:21
【问题描述】:
我目前正在尝试获取表单的 3 行特定输入:
XX.XX(浮点数) 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 小时的编程、搜索 Internet 等。我是一个超级初学者,自学 Smalltalk,所以我想看看为什么 nextLine 没有正确读取输入。以下是输入标准输入的示例输入,以及 Transcript show 和 inspect 的结果:
标准输入上的示例输入:
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 个输入由 分隔,我认为这是回车或换行。
"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,除以,然后将每个“部分”保存到3个不同的变量,但我想了解更多关于stdin nextLine如何工作和以便更好地了解这与stdin contents 的关系。鉴于我们知道只有 3 个输入,有没有好办法只执行 stdin nextLine 3 次?
【问题讨论】:
-
感谢您尝试学习 Smalltalk,但如果您尝试学习这门语言,我不推荐 GNU。考虑尝试Pharo、VisualWorks 或者 Dolphin 或 Squeak... 在我看来,通过命令行学习 Smalltalk 就像学习如何通过打孔卡制作图形一样。 ;-)
标签: io smalltalk gnu-smalltalk