2016-12-28 7 views
2

В настоящее время я пытаюсь получить 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 входа?

+2

Престижность для изучения Smalltalk, но если вы пытаетесь изучить язык, GNU не то, что я бы рекомендовал. Попытайтесь попробовать [Pharo] (http://pharo.org/), [VisualWorks] (http://www.cincomsmalltalk.com/main/products/visualworks/) или, может быть, Dolphin или Squeak ... обучение Smalltalk с помощью команд- мне кажется, что мне нравится научиться создавать графику с помощью перфокарт. ;-) –

ответ

0

Я не могу воспроизвести это на MacOS с GNU Smalltalk 3.2.5:

→ gst -f foo.st 
12.23 
12.23 
12 
12 
7 
An instance of String 
    contents: [ 
    [1]: $1 
    [2]: $2 
    [3]: $. 
    [4]: $2 
    [5]: $3 
    ] 
An instance of String 
    contents: [ 
    [1]: $1 
    [2]: $2 
    ] 
An instance of String 
    contents: [ 
    [1]: $7 
    ] 

Как вы можете видеть каждый вход эхом от ваших Transcript show: сообщений и выход inspect тоже выглядит правильно. Какую ОС и версию GNU Smalltalk вы используете?

+0

Я использую GNU Smalltalk 3.2.4. Это через HackerRank, так что, возможно, есть какая-то проблема. – qxzsilver

+0

Я считаю, что это может быть проблема с настройкой среды, которая не распознает входные байты должным образом. Я должен буду ждать ответа. У COBOL была аналогичная проблема – qxzsilver

0

Это, кажется, ошибка в GNU smalltalk. Если вы вводите ввод непосредственно с клавиатуры, то stdin nextLine работает просто отлично. Однако, если вы перенаправите ввод из файла, то stdin nextLine испортит его.

Существенно, что я не могу найти ни одного ответа в HackerRank, который написан на мелком диске, поэтому это должна быть старая проблема.

 Смежные вопросы

  • Нет связанных вопросов^_^