В настоящее время я пытаюсь получить 3 отдельные строки ввода формы:Smalltalk STDIN nextLine для фиксированного числа линий ввода
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 часа программирования, чистящий Интернет и т.д. Я uber- начинающий, обучая меня Smalltalk, поэтому я пытаюсь понять, почему nextLine isn 't правильно считывать входные данные. Ниже приведены типовые входы введены в стандартный ввод, а также результаты Стенограмма показать и осматривают:
Пример ввода на стандартный ввод:
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 .
Пример ввода (STDIN):
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 входа?
Престижность для изучения Smalltalk, но если вы пытаетесь изучить язык, GNU не то, что я бы рекомендовал. Попытайтесь попробовать [Pharo] (http://pharo.org/), [VisualWorks] (http://www.cincomsmalltalk.com/main/products/visualworks/) или, может быть, Dolphin или Squeak ... обучение Smalltalk с помощью команд- мне кажется, что мне нравится научиться создавать графику с помощью перфокарт. ;-) –