C言語学習ポータル(無料版) 学習コンテンツ はじめてのC scanfで入力を受け取る

🚪 はじめてのC

scanfで入力を受け取る

無料公開版に収録・読む目安 10分

🎯 scanfで数値を読み取り、&の意味と戻り値の確認までできる

ここまでのプログラムは、いつ動かしても同じ結果でした。人からの入力を受け取れるようになると、プログラムは急に「道具」になります。標準入力から値を読む代表が scanf です。

いちばん短い例

#include <stdio.h>

int main(void) {
    int nen;
    printf("好きな数を入れてください: ");
    scanf("%d", &nen);
    printf("入力されたのは %d です\n", nen);
    return 0;
}

int nen; で入れ物(変数)を用意し、scanf("%d", &nen); でそこに数値を読み込みます。書式指定子は printf と同じ考え方で、%d は整数、%lf は double、%c は1文字です。

なぜ & が要るのか

printf は値を「見せる」だけなので、値そのものを渡せば済みます。scanf は変数の中身を「書き換える」ので、値ではなく置き場所を教える必要があります。&nen は「nen という箱の番地」という意味です。

ビットprintf は写真を見せるだけ。scanf は荷物を届けるから、住所(&)が要るんだ。この住所の話は、あとでポインタとして本気で出てくるよ。

2つまとめて読む

#include <stdio.h>

int main(void) {
    int tate, yoko;
    printf("縦と横を空白区切りで: ");
    scanf("%d %d", &tate, &yoko);
    printf("面積は %d です\n", tate * yoko);
    return 0;
}

%d %d と並べれば、空白や改行で区切られた2つの数を続けて読めます。scanf は空白・タブ・改行を「区切り」として読み飛ばします。

戻り値を確かめる

scanf は「いくつ読み込めたか」を返します。これを見れば、入力が想定どおりだったか判定できます。

#include <stdio.h>

int main(void) {
    int n;
    printf("整数を1つ: ");
    if (scanf("%d", &n) == 1) {
        printf("%d を受け取りました\n", n);
    } else {
        printf("整数として読めませんでした\n");
    }
    return 0;
}

if は次のトラックの内容ですが、「1つ読めたら成功」という形だけ覚えておくと、この先ずっと役に立ちます。

罠・注意

& を忘れる。 コンパイルが通ってしまうことがあり、実行するといきなり異常終了します。scanf を書いたら & を指差し確認します。

double は %lf。 printf では %f ですが、scanf では %lf です。ここだけ非対称なので間違えやすいところです。

入力を促すメッセージを先に出す。 printf で「何を入れてほしいか」を書かないと、画面が固まったように見えます。

まとめ

scanf は書式に従って標準入力から値を読み、読み込めた個数を返します。書き換える相手の場所を教えるため & が必要で、double を読むときだけ %lf になります。そして——scanf には初心者を必ず一度つまずかせる罠があります。次のトピックで正面から片づけます。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

scanfすきゃんえふ

キーボードからの入力を読み取り、変数に格納する標準ライブラリの関数のこと。変数の前に&を付け忘れるミスが定番の罠として知られる。戻り値として、正しく読み取れた個数が返ってくる点も覚えておくとよい。

変数へんすう

値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。

書式指定子しょしきしていし

printfやscanfで使う%dや%fのような記号のこと。続けて渡す値をどんな型・どんな見た目として扱うかを指定する役割を持つ。指定する型と実際に渡す値の型がずれると、思わぬ表示結果になることがある。

int型いんとがた

整数を扱うための基本的な型のこと。小数点を持たない数値を格納する、C言語でもっとも使う機会の多い型のひとつにあたる。環境にもよるが、多くの場合4バイトの大きさで値を保持している。

double型だぶるがた

小数を含む数値を扱うための型のこと。floatより広い範囲と高い精度を持ち、実数計算における標準的な選択肢として使われる。小数点以下の桁数が多い計算でも、比較的高い精度を保てるのが特徴。

同じトラックのほかの項目

開発環境ゼロで始める——このポータルの使い方環境構築なしで学習を始める手順と、このポータルの3つの使い方(読む・追う・解く)が分かる Hello, World! を解剖するHello, World! の5行それぞれの役割を自分の言葉で説明できる main関数と#includemainが実行の入口であること、#includeがヘッダファイルを取り込む指示であることを説明できる コンパイルエラーと友達になるエラーメッセージ1行を分解して読み、最初の1件から順に直せるようになる printfで画面に出す——書式指定の基本書式指定子とエスケープシーケンスを使い分け、思いどおりの形で値を表示できる scanfの罠——入力の恐怖を越えるscanfの3大トラップ(&忘れ・型違い入力・改行残り)の症状と対処を説明できる コメントとコードの整え方2種類のコメントを使い分け、読みやすい書き方の基本ルールを身につける
‹ printfで画面に出す——書式指定の基本 scanfの罠——入力の恐怖を越える ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH