C言語入門|atoiで文字列を整数に変換する:数値文字列を計算に利用する方法

ここでは、
「文字列として持っている数字を、計算に使える整数に変換する方法」
を学んでいきます😊

画面表示や入力処理を作っていると、
「見た目は数字なのに、計算できない…🤔」
という場面に必ず出会います。

そのときに活躍するのが、今回紹介する atoi という命令です✨

文字列の数字は、そのままでは計算できない😮

たとえば、次のような変数があるとします。

String age = "10";

この "10" は、
👉 数字ではなく「文字の並び」
として扱われています。

そのため、

age + 1

のような計算はできません💦
C言語にとっては、「文字列に 1 を足す」という意味不明な処理だからです。

atoiとはどんな命令?😊

そんなときに使うのが atoi です。

atoi は、
👉 文字列を整数(int型)に変換する命令
です✨

書き方はとてもシンプルですよ👇

int n = atoi(➀);
項目内容
数字として解釈できる文字列
戻り値int 型の整数
必要なヘッダstdlib.h

※ printf のときとは違い、stdlib.h が必要なので注意しましょう🙂

atoiの役割をひとことで言うと✨

atoi は、
「文字列の数字を、本物の数字に化けさせる命令」
です😆

見た目は同じ「29」でも、

  • "29" → 文字列
  • 29 → 整数

この違いを埋めてくれるのが atoi なんですね。

サンプルプログラムで確認してみよう🧪

少し内容をアレンジしたサンプルを見てみましょう。

プロジェクト名:3-11-1 ソースファイル名: sample3-11-1.c

#include <stdio.h>
#include <stdlib.h>

typedef char String[1024];

int main(void)
{
    String score = "45";
    int point = atoi(score);
    printf("ボーナス込みの得点は %d 点です。\n", point + 5);
    return 0;
}

このプログラムでは、

1️⃣ score に文字列 "45" が入る
2️⃣ atoi(score) によって整数 45 に変換
3️⃣ 5 を足して計算
4️⃣ 結果を画面に表示

という流れになっています😊

atoiは「式」として評価される✨

ここ、ちょっと大事なポイントです☝️

int point = atoi(score);

この atoi(score) は、
👉 命令の実行結果として整数に評価される式
なんです。

つまり、次のような書き方もできます🙂

printf("%d\n", atoi(score) + 5);

atoi(score) が評価されて整数に置き換わり、
そのあとに + 5 の計算が行われます。

「命令の実行も、実は式の一種」
という考え方、ここでしっかり身につけておきましょう✨

数字以外の文字が含まれていたら?🤔

atoi は、少しクセのある動作もします。

たとえば👇

atoi("10A23");

この場合、

  • 数字の 10 までは読む
  • A が出てきた時点でストップ

結果は 10 になります😮

さらに、

atoi("ABC");

のように、
最初から数字が含まれていない場合は 0 が返されます。

atoiを使うときの注意点⚠️

atoi はとても便利ですが、
エラーを知らせてくれない という弱点があります。

  • 変換できなくても 0 が返る。
  • 本当に 0 なのか、失敗したのか判別しにくい。

そのため、
本格的な入力チェックが必要な場面では注意が必要
ということも、頭の片隅に置いておきましょう🙂

(入門段階では、まず「使えるようになる」ことが大切なので安心してください✨)

atoiでできるようになること🎉

atoi を覚えると、

  • 文字列として受け取った数値を計算に使える。
  • 入力値を使ったプログラムが書ける。
  • 表示だけでなく「処理するプログラム」に近づく。

と、一気にできることが広がります😊

ここまで理解できれば、
「文字列」と「数値」を行き来できるプログラム が書けるようになります🎊