誤ったコード
前回は電圧計算を実装しました(前回の記事)。今回は電流と抵抗計算を実装しオームの法則電卓らしくしていきます。ではクリックイベント内に下記コードを記載します。
void MainWindow::on_pB_Do_clicked()
{
_E=ui->lE_E->text().toFloat(); //電圧代入
_R=ui->lE_R->text().toFloat(); //抵抗値代入
_I=ui->lE_I->text().toFloat(); //電流値代入
_E=_I*_R; //電圧計算
_R=_E/_I; //抵抗計算
_I=_E/_R; //電流計算
ui->lE_E->setText(QString::number(_E)); //電圧表示
ui->lE_E->setText(QString::number(_R)); //抵抗表示
ui->lE_E->setText(QString::number(_I)); //電流表示
}
このようなコードを慣れないうちは書いてしまいがちです。上記コードだと全て計算してしまいます。ここで考えることは電圧を計算させたい時、抵抗を計算させたい時、電流を計算させたい時、それをどうやってコンピュータに判断させるかです。やり方は色々ありますが、数字が入力されていないlineEdit、つまり空白の項目を計算するようにしてみます。以下コードに修正します。
正しいコード
void MainWindow::on_pB_Do_clicked()
{
_E=ui->lE_E->text().toFloat(); //電圧代入
_R=ui->lE_R->text().toFloat(); //抵抗値代入
_I=ui->lE_I->text().toFloat(); //電流値代入
if(ui->lE_E->text()=="") //電圧が空白の場合
{
_E=_I*_R; //電圧計算
ui->lE_E->setText(QString::number(_E)); //電圧表示
}
else if(ui->lE_R->text()=="") //抵抗が空白の場合
{
_R=_E/_I; //抵抗計算
ui->lE_R->setText(QString::number(_R)); //抵抗表示
}
else if(ui->lE_I->text()=="") //電流が空白の場合
{
_I=_E/_R; //電流計算
ui->lE_I->setText(QString::number(_I)); //電流表示
}
}
抵抗と電流に数字を入力すると電圧、電圧と抵抗の場合は電流、電圧と電流の場合は抵抗が計算されたと思います。これで一旦オームの法則電卓が完成したと言いたい所ですが、まだまだです。全てのlineEditに数字が入力されていたら?数字ではなくアルファベットや漢字などの文字が入力されていたら?このような場合は変な文字が出力されたり、強制終了したり思いもよらない動作をします。つまりバグです。あらかじめバグを防ぐ対策を講じましょう。次回はバグ対策として正規表現のやり方を解説します。