2013-04-08 3 views
0

Я пытаюсь принять аргументы пользователя в массив и напечатать их в цикле while, может ли кто-нибудь помочь?Печать рекламы пользователя во время цикла

my @user_args = sort (@ARGV); 
chomp(@user_args); 
my $i = -1; 
while (++$i <= $#ARGV) 
{ 

    print "$ARGV[$i] \n"; 

} 



print "\nStep #2\n"; 
my @user_args2 = sort {$b cmp $a} @ARGV; 
while (++$i <= $#ARGV) 
{ 

    print "@user_args2[$i] \n"; 

} 

это мой обновленный код, я пытаюсь сейчас понять, как сортировать его все больше и убывающий основан от этих аргументов «Ask спросить о том, как 100„а DEF“OK OK», пожалуйста, помогите!

+3

Да. Измените 'while' на' foreach', а затем наберите ['perlsyn'] (http://search.cpan.org/perldoc?perlsyn). – mob

+0

Это для задания, которое я должен сделать в цикле while. – 2013-04-08 18:20:57

+0

, пожалуйста, объясните подробнее о том, как вы хотите отсортировать массив. Пожалуйста, введите ввод и ожидаемый результат. –

ответ

1

while повторяет цикл, пока выражение условия истинно.

Если пользователь предоставил некоторые аргументы, @user_args будет истинным, поэтому цикл будет введен. Поскольку цикл не изменяется @user_args, цикл будет повторяться бесконечно.

Если вы хотите использовать while, вам придется изменить свое состояние на то, что не является постоянным. Например, вы можете изменить @user_args в теле цикла. Что делать, если вы должны удалить первый элемент из @user_args каждый проход петли ...

+0

красиво ответил – ysth

0

Как @ikegami сказал, ваша петля - бесконечный цикл. Если пользователь передает аргументы «abc» и «123», то содержимое @user_args будет равно ('abc', 123) каждой итерации цикла while.

Существует много способов сделать это, но одним из способов было бы использовать shift, чтобы перенести первый элемент из массива @user_args. Сделайте это внутри цикла while, таким образом, как только вы переместите последний элемент из массива, цикл while больше не будет считаться истинным, а цикл while будет завершен.

Дополнительную информацию см. В разделе shift documentation, как перемещать элементы из массива.

+0

Справа - извините. Эта формулировка немного запутанна - я редактирую, чтобы отразить это. – BrianH

0

Если вы хотите сделать это в то время как цикл, а затем использовать другой переменный $ I, для поддержания индекса печатаемого массива, например:

#!usr/bin/perl -w 
use strict; 

my $i = -1; 
while (++$i <= $#ARGV) 
{ 

    print "$ARGV[$i]\n"; 

} 

$ # ARGV дает индекс последнему элемент массива $ # ARGV, например если @ARGV как это:

@ARGV = ("one","two"); 

тогда $ # ARGV даст 1, что индекс второго элемента, «два».

+0

Это будет трудно объяснить для него в классе ... – simbabque

+0

@simbabque Я отредактировал свой ответ, теперь OP может быть легко объяснить этот код –

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