第50回
プログラミング・クイズで腕試し~簡易積算プログラムを作ろう

getexp関数を作る

演算子を入力するgetexp関数を作ってみましょう。

関数の仕様

先に紹介したgetexp関数の仕様を、もう一度確認しておきましょう。

機能 :
演算子またはQの入力だけを受け付ける。
+-*/と'Q'のいずれかが入力されるまで入力を受け付ける。
戻り値 :
入力された演算子を返す。
"Q"が入力されたときは記号定数“ERR”を返す。
“ERR”はshort int型の-1とする。
宣言 :
char getexp(void);

具体的な機能とヒント

演算子の入力では、[Enter]なしで1文字のキーを押すだけとします。従って、この関数では1文字の入力にgetch関数を使います。

受け付けるキーは[+][-][*][/][Q][q]のいずれかです。それ以外のキーが押された場合には、「使用できる演算子は + - * / です」というメッセージを表示して、再度キーの入力を受け付けます。

+-*/の四則演算子が押されたらその文字をそのまま返し、Qまたはqが押されたら記号定数の“ERR”を返します。

  • ヒント
    この処理は、単純なループで構成できます。以下のような形です。

    (1) キー入力を受け付ける。
    (2) 押されたキーを調べる。
       四則演算子なら
          → キーの文字をそのまま返して終了。
       Qまたはqなら
          → “ERR”を返して終了。
       それ以外なら
          → メッセージを表示して(1)に戻る。
---------------------------------------------------------------------

●問題:getexp関数を作る

では、getexp関数のソースを考えてみましょう。

------------------------ thinking time --------------------------------

●解答

リスト2のようなソースが考えられます。

リスト2:演算子を受け取るgetexp関数のソース
char  getexp(void)
{
  char    c;    /* 受け取った演算子 */

  while (1) {
    printf("演算子([Q]で終了) : ");
    c = getch();
    printf("%c¥n", c);
    /* 入力された値によって戻り値を変える */
    if ((c == 'Q') || (c == 'q'))
      return (ERR);
    else if ((c == '+') || (c == '-') ||¥
                           (c == '*') || (c== '/'))
      return (c);
    /* 演算子と'Q'以外なら再入力 */
    else
      printf("使用できる演算子は + - * / です.¥n");
  }
}