入力をさせる(入力サブルーチン)

入力サブルーチン

  1. ユーザーに3桁の数を入力させます。
  2. ユーザーの入力が正しければ、その値を返してサブルーチンを抜けます。正しくない場合には1.に戻ります。
    $number=&input;
    print "$number\n";
    
    # 入力サブルーチン
    sub input {
    	my $number;
    	my $n0,$n1,$n2;
    	while () { # 無限ループ
    		print "1-9の数字を重複なしに組み合わせた3桁の数字を入力してください。";
    		$number=<stdin>;
    		chomp($number);
    		if ($number>=123 && $number<=987) { # 数字チェック
    			return $number;
    		}
    		print "入力が正しくありません。\n";
    	}
    }
  3. 重複チェックを追加します。百の桁、十の桁、一の桁の数を求め、等しいものがあったり、0であったりしたら再度入力するように促します。

    桁の数は「求めたい桁の一つ上の桁の数で割った余り」を「求めたい桁の数で割った商」で求まります。例えば、十の桁の数は「(元の数%100)/10」で計算します。

    $number=&input;
    print "$number\n";
    
    # 入力サブルーチン
    sub input {
    	my $number;
    	my $n0,$n1,$n2;
    	while () { # 無限ループ
    		print "1-9の数字を重複なしに組み合わせた3桁の数字を入力してください。";
    		$number=<stdin>;
    		chomp($number);
    		if ($number>=123 && $number<=987) { # 数字チェック
    			$n0=int($number/100); # 百の桁
    			$n1=int(($number%100)/10); # 十の桁
    			$n2=$number%10; # 一の桁
    			if ($n0!=$n1 && $n1!=$n2 && $n2!=$n0 && $n0*$n1*$n2!=0) {# 重複&非零チェック
    				return $number;
    			}
    		} 
    		print "入力が正しくありません。\n";
    	}
    }

ここでは3桁なので各桁を個別に求めていますが、任意の桁の数のときには繰り返しを使って求めます。