C言語

【C言語】入力が数字、文字のどちらかを判定する

プログラミング初心者向けの練習問題の一つに入力値が数字、文字のどちらであるかを判定するプログラムの作成があります。

本記事では、前述のプログラムの作成方法について解説しています。

文字コードについて

入力が数字、文字のどちらかを判別するプログラムを作成するためには、まず文字コードについて理解しておく必要があります。

文字コードとは

コンピュータ上ではあらゆるデータは0と1の組み合わせによって表現されます。

当然、文字や数字などの記号も0と1の組み合わせによって表現されており、それぞれの記号に対応付けられた値のことを文字コードと呼びます。

なお、文字コードにはいくつか種類がありますが、算用数字やアルファベットなどを扱う際はASCIIコードと呼ばれる文字コードを用いることが一般的です。

以下にASCIIコードにおける記号とそれに対応する値のまとめを示します。

~数字~
文字コード: 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 
   記号:    0,    1,    2,    3,    4,    5,    6,    7,    8,    9

~大文字アルファベット~
文字コード: 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a 
   記号:    A,    B,    C,    D,    E,    F,    G,    H,    I,    J,    K,    L,    M,    N,    O,    P,    Q,    R,    S,    T,    U,    V,    W,    X,    Y,    Z 

~小文字アルファベット~
文字コード: 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a 
   記号:    a,    b,    c,    d,    e,    f,    g,    h,    i,    j,    k,    l,    m,    n,    o,    p,    q,    r,    s,    t,    u,    v,    w,    x,    y,    z 

※0と1の表現、つまり、2進数表現では一つ一つの値の見分けが付きづらいため、16進数表現にしています。

実際にプログラムを作成してみる

それでは実際に入力が数字、文字のどちらであるかを判定するプログラムを作成していきます。

プログラム作成の手順

ここでは、以下の手順で処理を実装します。

  1. ユーザに任意の数字、文字などの記号を入力させる
  2. 入力された記号の文字コードを基に数字、文字、又はそれ以外の記号かの判定を出力する

実装例1

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  char c;

  printf("任意の値を入力して下さい:");
  scanf("%c", &c);

  /* 16進数表記で文字コードを表現 */
  if (0x30<=c && c<=0x39) {
    printf("入力された「 %c 」は数字です。\n", c);
  } else if ((0x41<=c && c<=0x5a) || (0x61<=c && c<=0x7a)) {
    printf("入力された「 %c 」は文字です。\n", c);
  } else {
    printf("入力された「 %c 」は文字でも数字でもありません。\n", c);
  }
  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

任意の値を入力して下さい:1
入力された「 1 」は数字です。
任意の値を入力して下さい:a
入力された「 a 」は文字です。
任意の値を入力して下さい:&
入力された「 & 」は文字でも数字でもありません。

実装例2

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  char c;

  printf("任意の値を入力して下さい:");
  scanf("%c", &c);

  /* 
    記号をクオーテーションで囲んだ表記でも
    条件式では文字コードに基づく比較が行われる
  */
  if ('0'<=c && c<='9') {
    printf("入力された「 %c 」は数字です。\n", c);
  } else if (('a'<=c && c<='z') || ('A'<=c && c<='Z')) {
    printf("入力された「 %c 」は文字です。\n", c);
  } else {
    printf("入力された「 %c 」は文字でも数字でもありません。\n", c);
  }
  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

任意の値を入力して下さい:0
入力された「 0 」は数字です。
任意の値を入力して下さい:A
入力された「 A 」は文字です。
任意の値を入力して下さい:%
入力された「 % 」は文字でも数字でもありません。