2015-02-07 3 views
0

클래스에 대한 간단한 점원 프로그램을 만들고 있습니다. 나는 사용자가 종이 점쟁이 (cootie catcher)처럼 4 개의 숫자 중 하나를 선택하게함으로써 시작하고 싶었다.배열 요소에 대한 숫자 사용자 입력 테스트

@number_choices = (1, 2, 3, 4) 배열을 만들었습니다. 사용자 입력이 배열의 숫자 중 하나와 같았는지 확인하려고했습니다.

my $number_chosen = <STDIN>; 
    chomp ($number_chosen); 

    my $num; 
    my $found = 0; 

    while ($found == 0) 
    { 
     foreach $num (@number_choices) 
     { 
       if ($number_chosen == $num) 
       { 
        $found = 1; 
        last; 
       } 

       else 
       { 
        print "I'm sorry, that number is not valid. Please pick a number: " . join(', ', @number_choices) . "\n"; 
        $number_chosen = <STDIN>; 
        chomp ($number_chosen); 
       } 
      } 
    } 
+0

무엇을 오류 메시지입니까? – Lizz

답변

0

당신은이 : 여기가 전혀 작동하지 않는, 지금까지이 (때로는 2를 제외하고, 나는이 프로그램을 실행할 때, 그것은 아무리 내가 입력 한 내용 번호 에러 메시지를 출력하거나 1) 무엇인가 논리 오류. 번호를 선택하지만 배열을 통해 모든 루프에 대해 다른 루프를 선택하게하므로 두 번째 루프에 숫자 2을 입력하면 첫 번째 입력에 관계없이 올바른 번호가되고 두 ​​번째 루프에는 동일한 번호 3이 입력됩니다.

foreach 루프 밖으로 오류 메시지를 넣고 while 안에 숫자를 입력해야합니다. 그 외에도 last은 가장 가까운 루프 밖에 없으므로 while에서 나가려면 레이블을 사용해야합니다. 더러운 솔루션과 유사한 것 :

my @number_choices = (1, 2, 3, 4); 

my $num; 
my $found = 0; 

LOOP: 
while ($found == 0) 
{ 
    $number_chosen = <STDIN>; 
    chomp ($number_chosen); 
    foreach $num (@number_choices) 
    { 
      if ($number_chosen == $num) 
      { 
       $found = 1; 
       last LOOP; 
      } 

     } 
     print "I'm sorry, that number is not valid. Please pick a number: " . join(', ', @number_choices) . "\n"; 
} 
+0

감사합니다. @Birei, 나는 논리 주위에 머리를 감싸는 데 어려움을 겪고있었습니다. 나는 당신이 제안한 것과 비슷한 일을 끝내었다. – twistylittlepassages

관련 문제