1

ユーザーにランダムな数学の質問と回答を与えるプログラムを作成しようとしていますが、演算子を文字列にせずに配列に格納しようとするとエラーが発生しますが、プログラムに質問を解決させたいときに問題が発生します演算子は無視され、2 つの数値が加算されるためです。助けてください!?!

    #!/usr/bin/perl

    use strict;
    use warnings;

    sub randomNumber  #generates a random number (1-100)
    {
        my $randomNumber = int(rand(100)) + 1;
        return "$randomNumber\n";
    }

    sub operators #randomly chooses a operator
    {
        my @list = ( "+" , "-" ,  "/"  , "*" );
        my $index = rand(@list);
        return $list[$index];
        }

    sub question{   
        my $firstNumber = randomNumber();
        my $operater = operators();
        my $secondNumber = randomNumber();
        print $firstNumber.$operater.$secondNumber."\n";
        print $firstNumber + $operater + $secondNumber;   #this is the problem line
    }

    question();

実行時のコードのスクリーンショットは次のとおりです。

ここで助けてくれてありがとう、将来の読者のための私の完成した実装です:

#!/usr/bin/perl

use strict;
use warnings;

sub randomNumber
{
    my $randomNumber = int(rand(100)) + 1;
    return $randomNumber;
}

sub randomOperator
{
    my @operators = ( "+" , "-" ,  "/"  , "*" );
    my $index = rand(@operators);
    return $operators[$index];
    }

sub question{   
    my $firstNumber = randomNumber();
    my $operator = randomOperator();
    my $secondNumber = randomNumber();
    print "$firstNumber $operator $secondNumber =";
    my $userAnswer = <STDIN>;
    my $trueAnswer = eval "$firstNumber $operator $secondNumber";  #gets answer
    if ($userAnswer == $trueAnswer)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

print question(); 
4

2 に答える 2

2
print eval "$firstNumber $operater $secondNumber";

それ以外の

print $firstNumber + $operater + $secondNumber;

ユーザー入力を処理するときは、事前に健全性チェックを行うevalこともお勧めします。

于 2013-09-29T16:56:31.997 に答える