Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Perl


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Perl

Выпуск № 67
от 17.08.2006, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 146, Экспертов: 11
В номере:Вопросов: 1, Ответов: 3


Вопрос № 51911: Здравствуйте эксперты, у меня следующее: Программа должна считывать несколько слов в массив, затем выдать количесво элементов, и затем, распечатать все введенные элементы... для заполнения массива я использую оператор <STDIN>, это у мен...

Вопрос № 51.911
Здравствуйте эксперты, у меня следующее:
Программа должна считывать несколько слов в массив, затем выдать количесво элементов, и затем, распечатать все введенные элементы...
для заполнения массива я использую оператор <STDIN>, это у меня получается, так же получается вывести все элементы массива на экран... но вот подсчитать колличество слов в массиве не получается, насколько мне известно это делается путем присваевания скалярной переменной всего массива (то бишь массив в скалярном контексте), но вот у меня, после того как я введу 5 слов, пишет что в массиве только 2, почему??? (заканчиваю ввод слов путем нажатия ctr+z, т.е. конец строки) листинг примерной программки в приложениии.
Всем спасибо за внимание.

Приложение:

Отправлен: 12.08.2006, 02:22
Вопрос задал: Lperw (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: dianacode
Доброе время суток, Lperw

эта проблема - не проблема - подскажите перл как обращаться с переменной - ответьте ему что это скаляр - а именно :

$q=@words+0;

или

$q=$#words;

вот и всё

с уважанием, удачи

---------
There is more than one way to do it
Ответ отправила: dianacode (статус: 3-ий класс)
Ответ отправлен: 12.08.2006, 02:40

Отвечает: -OC-
Здравствуйте, Lperw!
начнем с простого - с размера массива.
вы делаете правильно , т.е. присвоение скаляру массива всегда дает его размер.
но более "красивым" считается использование функции scalar.
$q = scalar(@words);
Но ошибка у вас скорее всего не в получении размера массива, а в его формировании.
А почему вы не пользуетесь отладкой? Я не говорю об встроенном отладчике, но хотя бы контролировать значения вводимые с STDIN , а тем более в массив.После ввода просто выведите построчно ваш массив( т.е. каждый элемент массива - новая строка) и вы поймете почему у вас размер не совпадает с требуемым.
ИМХО ошибка у вас именно вот здесь - @words=;. Так не делается. Вы должны четко знать каким образом будет осужествлятьсяя ввод и что будет являться элементом массива т.е. при вводе слов что будет разделять их на элементы массива пробелы или перевод строки.
Если каждое слово будет вводиться с новой строки, то для этого лучший вариант такой(см. приложение). Если же в каждой строке будет по нескольку слов и их так же надо разбить на элементы, то приведенный код нужно только немного модифицировать с учетом разбиения строки на подэлементы , используя split с соответствующим разделителем вместо $_ в push. См. вариант 2 в приложении . Этот вариант более универсален и его можно модифицировать под свои нужды. Он работает когда каждый элемент массива- новая строка и отделенные друг от друга пробелом слова в строке. Т.е. при таком вводе :
hfwfhoei
fhdslhf hfskdjhfsd sedfuefj
hfsih dihfsdi
это будет 6 элементов.

надеюсь что об"яснил понятно. Извиняюсь за некоторую сумбурность.

Приложение:

Ответ отправил: -OC- (статус: Студент)
Ответ отправлен: 12.08.2006, 14:09
Оценка за ответ: 5

Отвечает: Хватов Сергей
Здравствуйте, Lperw!

words=<STDIN>;
считывает весь файл, разбивая его на строки. Так что вы считаете не слова, а строки.
Попробуйте так:

Приложение:

Ответ отправил: Хватов Сергей (статус: 1-ый класс)
Ответ отправлен: 14.08.2006, 10:21


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное