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

  1. ユーザーにマス目の番号(0〜8)を入力させます。
  2. ユーザーの入力が正しければ、その値を返してサブルーチンを抜けます。正しくない場合には1.に戻ります。

    Perl版(入力チェックが手抜きです。)

    $number=&input;
    print "$number\n";
    
    # 入力サブルーチン
    sub input {
    	my $number;
    	while () { # 無限ループ
    		print "012\n";
    		print "345\n";
    		print "678\n";
    		print "0-8の数字をいれてください。";
    		$number=<stdin>;
    		chomp($number);
    		if ($number>=0 && $number<=8) { # 数字チェック。文字列も0として通ってしまう。TT
    			return $number;
    		} else {
    			print "入力が正しくありません。";
    		}
    	}
    }

    C版(入力が手抜きです。)

    #include <stdio.h>
    
    int input(void) {
    	int number;
    	while (1) { # 無限ループ
    		printf("012\n");
    		printf("345\n");
    		printf("678\n");
    		printf("0-8の数字をいれてください。");
    		scanf("%d",&number); # 数字以外の文字をいれると暴走します。TT
    		if (number>=0 && number<=8) { # 数字チェック。
    			return number;
    		} else {
    			printf("入力が正しくありません。\n");
    		}
    	}
    }
    
    void main (void) {
    	int number;
    	number=input();
    	printf ("%d",number);
    }
  3. 重複チェックを追加します。入力された番号がすでに入力済みであった場合には、そのことを表示して再度入力するように促します。
    for ($i=0; $i<9; $i++) {
    	$b[$i]==0; # 盤面初期化
    }
    
    $number=&input(@b); # 盤面データを渡す
    print "$number\n";
    
    # 入力サブルーチン
    sub input {
    	my @b=@_;
    	my $number;
    	while () { # 無限ループ
    		print "012\n";
    		print "345\n";
    		print "678\n";
    		print "0-8の数字をいれてください。";
    		$number=<stdin>;
    		chomp($number);
    		if ($number>=0 && $number<=8) { # 数字チェック。文字列も0として通ってしまう。TT
    			if ($b[$number]!=0) { # 重複チェック
    				print "そのマスはすでに入力済みです。\n";
    			} else {
    				return $number;
    			}
    		} else {
    			print "入力が正しくありません。";
    		}
    	}
    }